# [leetcode] 659.Split Array into Consecutive Subsequences

You are given an integer array sorted in ascending order (may contain duplicates), you need to split them into several subsequences, where each subsequences consist of at least 3 consecutive integers. Return whether you can make such a split.

Example 1:

Input: [1,2,3,3,4,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3
3, 4, 5


Example 2:

Input: [1,2,3,3,4,4,5,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3, 4, 5
3, 4, 5


Example 3:

Input: [1,2,3,4,4,5]
Output: False


Note:

1. The length of the input is in range of [1, 10000]

#include<map>
class Solution {
public:
bool isPossible(vector<int>& nums) {
map<int, int> m;
for(int i = 0; i < nums.size(); i++){
m[nums[i]]++;
}
map<int, int> t;
for(int i = 0; i < nums.size(); i++){
int num = nums[i];
if(m[num] <= 0) continue;
if(t[num-1] > 0){
t[num-1]-=1;
t[num] += 1;
m[num] -= 1;
}else if(m[num+1] > 0 && m[num+2] > 0){
m[num+1]--;
m[num+2]--;
m[num]--;
t[num+2] ++;
}else{
return false;
}
}
return true;
}
};