740. 删除并获得点数
学习官方解答:
把同一个数的和存在数组total里(total里是从0到nums里的最大值,每个数对应的加和),之后去掉左右两边的数就可以转化成了192的打家劫舍问题
class Solution:
def deleteAndEarn(self, nums: List[int]) -> int:
maxVal = max(nums)
total = [0] * (maxVal + 1)
for val in nums:
total[val] += val
size = len(total)
dp = [0] * size
dp[0] = total[0]
dp[1] = max(total[0], total[1])
for i in range(2, size):
dp[i] = max(dp[i - 2] + total[i], dp[i - 1])
return dp[-1]