新建数组number来存取nums中每个数出现的个数总和,其中number中的i表示nums中的数,i位置对应的值表示,对应的数的总和
对于示例2,有number = [0,0,4,9,4]
表示nums中数字0总和0,数字1总和0,数字2总和4,数字3总和9,数字4总和4
由于删除 nums[i] 后,需要同时删除 nums[i]+1 和 nums[i]-1(nums[i]+1 和 nums[i]-1 不需要计点数),在number数组中意味着获取当前 number[i] 后,就不用获取 number[i]-1 和 number[i]+1
所以,把number中的值来计算打家劫舍力扣-198.打家劫舍_Node_Su的博客-CSDN博客
class Solution(object):
def deleteAndEarn(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
number = [0] * 10001
n = len(nums)
for i in range(n):
number[nums[i]] += nums[i]
return self.rob(number)
def rob(self, nums):
n = len(nums)
dp = [0] * n
dp[0] = nums[0]
if n == 1:
return nums[0]
dp[1] = max(nums[1], nums[0])
for i in range(2, len(nums)):
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]) # 不偷,偷
return dp[len(dp) - 1]
if __name__ == '__main__':
nums = [0, 0]
Sol = Solution()
res = Solution.deleteAndEarn(Sol, nums)
print(res)
|