leetcode 740. 删除并获得点数(dp)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 740. 删除并获得点数(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個整數數組 nums ,你可以對它進行一些操作。
每次操作中,選擇任意一個 nums[i] ,刪除它并獲得 nums[i] 的點數。之后,你必須刪除每個等于 nums[i] - 1 或 nums[i] + 1 的元素。
開始你擁有 0 個點數。返回你能通過這些操作獲得的最大點數。
示例 1:
輸入:nums = [3,4,2]
輸出:6
解釋:
刪除 4 獲得 4 個點數,因此 3 也被刪除。
之后,刪除 2 獲得 2 個點數。總共獲得 6 個點數。
解題思路
代碼分為兩個部分
dp[i][0]代表當前元素是i,并且不刪除該元素。因此前一個元素可以是被刪除元素,也可以不是
dp[i][1]代表當前元素是i,需要刪除該元素。因此前一個元素必須不為刪除元素(因為如果前一個元素是刪除元素,該元素已經被刪除掉了),并且加上刪除后的得分
代碼
func MaxV (a int,b int) int {if a>b{return a}else {return b} }func deleteAndEarn(nums []int) int {cnt:=make([]int,10008)max:=-1for _, num := range nums {cnt[num]++if num>max{max=num}}dp:=make([][2] int,max+1)for i := 1; i <= max; i++ {dp[i][0]=MaxV(dp[i-1][0],dp[i-1][1])dp[i][1]=dp[i-1][0]+i*cnt[i]}return MaxV(dp[max][0],dp[max][1]) }總結
以上是生活随笔為你收集整理的leetcode 740. 删除并获得点数(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 1473. 粉刷房子
- 下一篇: 重学TCP协议(5) 自连接