给定一个下标从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;
}
};
标签:最大化,lc3041,nums,int,元素,数组,ans,dp
From: https://www.cnblogs.com/chenfy27/p/18106612