题目描述
给你一个整数数组 nums,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i],删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
解题思路
1. 数据处理
每次取一个数后,要删除掉 i-1 和 i+1 的数,也就是相邻的数。相同的数处理逻辑是一样的,因此我们可以将同样的数合并成价值映射格式 {value: total_points}。
示例数据经过处理之后变成了以下数据格式(key 为数值,value 为该数值总和):
const inputData = [3,7,10,5,2,4,8,9,9,4,9,2,6,4,6,5,4,7,6,10];
const map = {3:3, 7:14, 10:20, 5:10, 2:4, 4:16, 8:8, 9:27, 6:18};
在处理的过程中记录一下数组中的最大值,在后面需要用到。
2. 状态转移
所谓状态转移公式就是用来描述当前状态的最优结果,如何由之前的状态推导出来的公式。


