659. 分割数组为连续子序列
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。
如果可以完成上述分割,则返回 true ;否则,返回 false 。
下面是C++代码实现(官方答案搬运版):
class Solution {
public:
bool isPossible(vector<int>& nums) {
unordered_map<int,int> countMap;
unordered_map<int,int> endMap;
for(int i: nums)
{
countMap[i]+=1;
}
for(int i : nums)
{
int count=countMap[i];
if(count>0)
{
int preEndCount=endMap[i-1];
if(preEndCount>0)
{
countMap[i]-=1;
endMap[i-1]-=1;
endMap[i]+=1;
}
else
{
int count1=countMap[i+1];
int count2=countMap[i+2];
if(count1 && count2)
{
countMap[i]-=1;
countMap[i+1]-=1;
countMap[i+2]-=1;
endMap[i+2]+=1;
}
else
{
return false;
}
}
}
}
return true;
}
};
运行效果:
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences