給定一個下標從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;
}
};