lc3041 修改陣列後最大化陣列中的連續元素數目

chenfy27發表於2024-03-31

給定一個下標從0開始的只包含正整數的陣列nums,你可以將陣列中任意元素的值增加至多1,修改後,從陣列中選擇一個或多個元素,並確保這些元素升序排列後是連續的,求它的最大長度。

將陣列排序,然後從大到小處理,每個元素分別計算以它開始能得到的長度,包含它本身和加1後兩種情況,遞推即可。

class Solution {
public:
    int maxSelectedElements(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        map<int,int> dp;
        for (int i = n-1; i >= 0; i--) {
            dp[nums[i]] = 1 + dp[nums[i]+1];
            dp[nums[i]+1] = 1 + dp[nums[i]+2];
        }
        int ans = 0;
        for (auto [k,v] : dp) {
            ans = max(ans, v);
        }
        return ans;
    }
};

相關文章