题目:
给你一个整数数组 nums ,你可以对它进行一些操作。
每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。
开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。
最终代码:
class Solution {
public int deleteAndEarn(int[] nums) {
int all[]=new int[10002];
int dp[]=new int[10002];
for(int i=0;i<nums.length;i++){
all[nums[i]]++;
}
dp[1]=all[1]*1;
int ans=0;
for(int i=2;i<all.length;i++){
dp[i]=Math.max(dp[i-1],dp[i-2]+i*all[i]);
}
return dp[dp.length-1];
}
}