给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。
如果可以完成上述分割,则返回 true ;否则,返回 false 。
来源:力扣(LeetCode)
链接:添加链接描述

贪心算法:
思路分析: 分析i时,先查找有没有以i-1结尾的子序列,有则接着,没有则需要新建长度最小的序列【i, i+1, i+2】。
class Solution {
public:
bool isPossible(vector<int>& nums) {
map<int, int> count;
map<int, int> endnum;
for(auto num : nums){
count[num]++;
}
for(auto num : nums){
if(count[num] == 0) continue;
count[num]--;
if(endnum[num-1] ){
endnum[num]++;
endnum[num-1]--;
}else if(count[num+1] && count[num+2]){
endnum[num+2]++;
count[num+1]--;
count[num+2]--;
}else return false;
}
return true;
}
};
本文探讨了如何将一个升序排列的整数数组分割成一个或多个子序列,每个子序列由连续整数组成且长度至少为3。通过使用贪心算法,文章详细介绍了实现这一目标的具体步骤和条件判断,旨在帮助读者理解和掌握此算法。
1364

被折叠的 条评论
为什么被折叠?



