解题思路
转换成打家劫舍问题来做,因为题目的本意无非就是取或不取,如果取了3就不能取2,4
1.统计每个数的综合,用num存着,num大小为10001
2.进行dp
代码
class Solution {
public int deleteAndEarn(int[] nums) {
if (nums.length==0) return 0;
if (nums.length==1) return nums[0];
int num[] = new int[10001];
Map<Integer,Integer> map = new HashMap<>();
for (int i=0;i<nums.length;i++){
if (!map.containsKey(nums[i])) {
map.put(nums[i],1);
}else map.put(nums[i],map.get(nums[i])+1);
}
Set<Integer> set = map.keySet();
for (Integer index:set) {
num[index] = index*map.get(index);
}
int[] dp = new int[num.length];
dp[1]=num[1];
dp[2]=Math.max(num[1],num[2]);//防止出现2,1返回的是1的情况
for (int i=3;i<num.length;i++){
dp[i]=Math.max(dp[i-2]+num[i],dp[i-1]);
}
return dp[num.length-1];
}
}