给你一个按升序排序的整数数组 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;
}
};