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];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章