【LeetCode】删除并获得点数

删除并获得点数

      • 题目描述
      • 算法分析
      • 编程代码
      • 空间优化

链接: 删除并获得点数

题目描述

【LeetCode】删除并获得点数_第1张图片

算法分析

【LeetCode】删除并获得点数_第2张图片

编程代码

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        const int N = 10001;
        int arr[N] = {0};
        for(const auto& n : nums){
            arr[n]+=n;
        }

        vector<int> f(N);
        auto g = f;
        for(int i = 1;i<N;++i)
        {
            f[i] = g[i-1]+arr[i];
            g[i] = max(g[i-1],f[i-1]);
        }
        return max(g[N-1],f[N-1]);
    }
};

【LeetCode】删除并获得点数_第3张图片

空间优化

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        const int N = 10001;
        int arr[N] = {0};
        for(const auto& n : nums){
            arr[n]+=n;
        }
        
        int pre,back,ret;
        pre = back = ret = 0;
        for(int i = 1;i<N;++i)
        {
            ret = back + arr[i];
            back = max(back,pre);
            pre = ret;
        }
        return max(ret,back);
    }
};

【LeetCode】删除并获得点数_第4张图片

你可能感兴趣的:(leetcode,leetcode)