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