20.12.4 leetcode659

题目链接:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/

题意:给你一个有序数组,是否可以将这个数组分成1个或多个序列,每个序列都是长度大于等于3的连续整数数组。

分析:用贪心的思想,对一个数x来说,当存在以x-1结尾的大于3的序列时,最好的选择是加入前面的序列,而不是以自己为头重新建一个序列(这样新建的序列长度就为1了),也就是说,当我们处理一个数时,有些判断存不存在以x-1为结尾的序列,存在的话就加入它,不存在的话就看x+1,x+2存在不存在,存在的话就自己新建一个,不存在的话就说明不可能按要求分序列了。

class Solution {
public:
    bool isPossible(vector<int>& nums) {
        unordered_map<int,int> countMap;
        unordered_map<int,int> endMap;
        for(auto& x:nums){
            countMap[x]++;
        }
        for(auto& x:nums){
            if(countMap[x]){
                if(endMap[x-1]){
                    countMap[x]--;
                    endMap[x]++;
                    endMap[x-1]--;
                }else{
                    if(countMap[x+1]&&countMap[x+2]){
                        countMap[x]--;
                        countMap[x+1]--;
                        countMap[x+2]--;
                        endMap[x+2]++;
                    }
                    else    return false;
                }
            }
        }
        return true;
    }
};
原文地址:https://www.cnblogs.com/qingjiuling/p/14087497.html