小編給大家分享一下LeetCode如何實現(xiàn)刪除與獲得點數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,貞豐企業(yè)網(wǎng)站建設,貞豐品牌網(wǎng)站建設,網(wǎng)站定制,貞豐網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,貞豐網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1
題目描述
給定一個整數(shù)數(shù)組 nums ,每次操作中,選擇任意一個 nums[i] ,刪除它并獲得 nums[i] 的點數(shù),同步刪除每個等于 nums[i] - 1 或 nums[i] + 1 的元素。初始點數(shù)為0,返回可獲得的最大點數(shù)。如:nums=[3,4,2],返回6。(首先選擇4,積累4點數(shù),同時刪除3,再選擇2,再積累2點數(shù),總共為6。其他方式積累的點數(shù)均小于6)
2
題解
中間狀態(tài):此處中間狀態(tài)dp[i]表示從1選擇到i可獲得的最大點數(shù)。
狀態(tài)轉移:一個值在整個過程中只有被刪除和被獲取點數(shù)兩個可能,并且獲取與否會影響其他數(shù)值的被選擇情況。因此新來一個數(shù),要么不選,則此時dp[i]=dp[i-1];如果選,則i-1就不能選,此時dp[i]=dp[i-2]+value[i],所以最終dp[i]=max(dp[i-1],dp[i-2]+value[i])。
class Solution: def deleteAndEarn(self, nums: List[int]) -> int: if not nums: return 0 dp = [0]*(max(nums)+1) value = dp.copy() #value = [0]*(max(nums)+1) for i,a in enumerate(nums): value[a]+=a dp[1] = value[1] for i in range(2,max(nums)+1): dp[i]=max(dp[i-1],dp[i-2]+value[i]) return dp[-1]
以上是“LeetCode如何實現(xiàn)刪除與獲得點數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!