题目:
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:
- 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;
}
};