这道题可以说是,隐藏的打家劫舍hhh。将原数组进行一下处理就变成了打家劫舍。
int deleteAndEarn(int* nums, int numsSize){
int i, max = 0;
for(i = 0; i < numsSize; ++i){
max = fmax(max, nums[i]);
}
int sum[max+1];
memset(sum, 0, sizeof(sum));
for(i = 0; i < numsSize; ++i){
sum[nums[i]] += nums[i];
}
int first = sum[0], second = fmax(sum[0], sum[1]), temp;
for(i = 2; i <= max; ++i){
temp = second;
second = fmax(second, first + sum[i]);
first = temp;
}
return second;
}