[每日一题] leetcode 740. 删除并获得点数

统计每个值所能获得的点数

dp 从终态考虑转移方程!!!

dp[i][0]表示第i个数保留

dp[i][1]表示删除第i个数

dp[n][0] = dp[n - 1][1];

dp[n][1] = max(dp[n - 2][0], dp[n - 2][1]) + a[n];

class Solution {
public:
    int dp[20010][2];
    int num[20010];
    int deleteAndEarn(vector<int>& nums) {
        memset(dp, 0, sizeof(dp));
        memset(num, 0, sizeof(num));
        int n = nums.size();
        for(int i = 0; i < n; i++)
        {
            if(num[nums[i]] == 0)
                num[nums[i]] = nums[i];
            else num[nums[i]] += nums[i];
        }
        dp[1][0] = 0;
        dp[1][1] = num[1];
        for(int i = 2; i <= 20000; i++)
        {    dp[i][0] = dp[i - 1][1];
            dp[i][1] = max(dp[i - 2][0], dp[i - 2][1]) + num[i];
        }
        return max(dp[20000][0], dp[20000][1]);

    }
};

 

上一篇:438. Find All Anagrams in a String


下一篇:找到字符串中的所有分母异位词438