删除并获得点数(难度:中等)
AC代码
思路:
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
//排序
sort(nums.begin(),nums.end());
//统计每个数字的字数
int len=nums.size();
//当数组中没有连续的数字时,默认=0
int len1=nums[len-1]-nums[0]+1;
vector <int> sum(len1+1,0);
for(int i=0;i<len;i++){
sum[nums[i]-nums[0]]+=nums[i];
}
//打家劫舍思路
vector <int> dp(len1+1,0);
//dp存储最大点数
dp[0]=sum[0];
dp[1]=max(sum[0],sum[1]);
for(int i=2;i<len1;i++){
dp[i]=max(sum[i]+dp[i-2],dp[i-1]);
}
return dp[len1-1];
}
};