lc3041 修改数组后最大化数组中的连续元素数目

给定一个下标从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;
    }
};
posted @ 2024-03-31 12:49  chenfy27  阅读(4)  评论(0编辑  收藏  举报