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]

 

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;
    }
};

 

posted @ 2017-12-15 04:32  jxr041100  阅读(131)  评论(0编辑  收藏  举报