删除并获得点数
删除并获得点数
题目描述
原题链接:740. 删除并获得点数 - 力扣(LeetCode)
给你一个整数数组 nums ,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 2 * 104
1 <= nums[i] <= 104
解题思路
定义集合f[i]:选取值为1~i的数可以获取的最大值
状态转移方程:
f[i] = max(f[i-1], f[i-2] + f[i] * i)
含义是
1. 如果选取i值那么最终结果就是f[i-2] (选取值为1~(i-2)的数可以获取的最大值)和当前值相加
2. 如果不选就是选取值为1i的数可以获取的最大值与选取值为1(i-1)的数可以获取的最大值想的
3. f[i]的结果是1和2的中的最大值
代码
1 |
|
AC记录