Leetcode-740 删除与获得点数

题目链接

思路——(打家劫舍4?)

一开始看到左右都受影响就想到了Leetcode-312 戳气球,但是后来才发现这就是打家劫舍鸭!!!
只要你选用了a,那么a-1和a+1都和你无关了,那么肯定是要贪心的选全部的a才对得起损失。
问题转化为对于每一个元素,不能选它的临近值(不能偷隔壁),联动成功!
具体代码
1.将nums数组最大值求出mm
2.开一个mm+1大小的value数组,value[mm]表示mm的个数
3.dp计算打家劫舍,递推dp[i]=max(dp[i-2]+i*value[i],dp[i-1]);

代码

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        if(nums.size()==0) return 0;
        if(nums.size()==1) return nums[0];
        int mm=0;
        for(int i=0;i<nums.size();i++)
        {
            mm=max(mm,nums[i]);
        }
        vector<int> value(mm+1,0);
        for(int i=0;i<nums.size();i++)
        {
            value[nums[i]]++;
        }
        vector<int> dp(value.size(),0);
        dp[0]=0;
        dp[1]=value[1];
        for(int i=2;i<value.size();i++)
        {
            dp[i]=max(dp[i-2]+i*value[i],dp[i-1]);
        }
        return dp[dp.size()-1];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章