打家劫舍思路:
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
int max_value = 0;
for(int val:nums){
max_value = max(max_value,val);//得到nums中得最大值
}
vector<int>sum(max_value+1);//开辟一个比max_value大1的vector
for(int val:nums){
sum[val] += val;//把相同的值相加到sum的索引val处,例如:2,2,3,3,3,4,相加之后的sum为4,9,4,然后求这三个数的不相邻的最大和
}
return rob(sum);
}
int rob(vector<int>nums){//参考打家劫舍,动态规划
int sum = 0;
int first = nums[0];
int second = max(nums[0],nums[1]);
for(int i = 2;i < nums.size();i++){
sum = max(second,first+nums[i]);
first = second;
second = sum;
}
return second;
}
};