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:
- The length of the input is in range of [1, 10000]
class Solution { public: bool isPossible(vector<int>& nums) { unordered_map<int,priority_queue<int,vector<int>,std::greater<int>>>mp; int need_three_squenence = 0; for(auto num:nums) { if(mp[num - 1].empty()) { need_three_squenence++; mp[num].push(1); } else { int count = mp[num - 1].top(); mp[num - 1].pop(); mp[num].push(++count); if(count==3) need_three_squenence--; } } return need_three_squenence==0?true:false; } };