和《打家劫舍》比较相像,
代码:
class Solution:
def deleteAndEarn(self, nums: List[int]) -> int:
nums_uniq_list = []
char_sum_dict = {}
for v in nums:
if v not in char_sum_dict:
nums_uniq_list.append(v)
char_sum_dict[v] = 0
char_sum_dict[v] += v
nums_uniq_sort_list = sorted(nums_uniq_list) # [2,3,4]
length = len(nums_uniq_sort_list) # 3
nums_uniq_sort_list = [0] + nums_uniq_sort_list # [0, 2, 3, 4]
dp = [0] * (length + 1) # [0, 0, 0, 0]
for inx in range(1, length+1): # [1,2,3]
diff_value = nums_uniq_sort_list[inx] - nums_uniq_sort_list[inx-1]
if diff_value == 1:
dp[inx] = max(dp[inx-2] + char_sum_dict[nums_uniq_sort_list[inx]], dp[inx-1])
else:
dp[inx] = dp[inx-1] + char_sum_dict[nums_uniq_sort_list[inx]]
return dp[-1]