659. Split Array into Consecutive Subsequences(贪心)
2018-01-09 01:01
387 查看
1.题目描述
2.代码
思想:对每一个可能的序列都创建一个容器保存起来,记录它的序列尾,每次查询可匹配的队列尾部,优先匹配那些当前序列长度小于3的序列。比如:对于待拆分的1233445,会生产这样的序列123和3,当4到来时,优先匹配3(请思考为什么要这样?),这样,遍历结束后,如果有哪一个序列的长度是小于3的,说明不存在这样的拆分。优化:而实际上我们并不需要维护这样的一些序列,从上面分析看出,我们注重的信息只是序列的尾元素n及其长度size,所以,对每个序列,我们需要维护的仅此两个变量。
实现:通过使用尾元素作为key的map容器backs,小顶堆的优先队列,则backs[key]记录序列尾元素值为key的所有序列的长度,以同样元素结尾的不停长度的(序列)就这样被维护在一个vector,且长度较小的放在优先队列的头部,匹配的时候优先出列。再者,维护一个当前有多少序列的长度小于3的变量SquenceSizeLess3,最终依靠这样变量判断是否拆分成功。
class Solution { public: bool isPossible(vector<int>& nums) { //小顶堆,小的元素作为队列头 unordered_map<int, priority_queue<int, vector<int>, std::greater<int>>> backs; //记录有多少个squence的长度小于3 int SquenceSizeLess3 = 0; for(int num : nums) { if(!backs[num - 1].empty()) { int size = backs[num - 1].top(); backs[num - 1].pop(); backs[num].push(++size); if(size == 3) SquenceSizeLess3--; } else { //找不到可匹配的队尾,创建新的squence backs[num].push(1); SquenceSizeLess3++; } } return SquenceSizeLess3 == 0; } };
参考:leetcoe上的discussion
联系邮箱:sysuygm@163.com
相关文章推荐
- [Leetcode] 659. Split Array into Consecutive Subsequences 解题报告
- 659. Split Array into Consecutive Subsequences
- leetcode 659. Split Array into Consecutive Subsequences 分割连续序列 + 贪心算法
- 659-Split Array into Consecutive Subsequences
- 659. Split Array into Consecutive Subsequences
- Leetcode659——Split Array into Consecutive Subsequences
- LeetCode[659]Split Array into Consecutive Subsequences(Java)
- leetcode 659. Split Array into Consecutive Subsequences
- leetcode659 Split Array into Consecutive Subsequences
- 659. Split Array into Consecutive Subsequences
- LeetCode 659: Split Array into Consecutive Subsequence
- Split Array into Consecutive Subsequences
- [LeetCode] 贪心算法之 Split Array into Consecutive Subsequence
- 算法作业系列9——Split Array into Consecutive Subsequences
- LeetCode Split Array into Consecutive Subsequences
- LeetCode #659 Split Array into Consecutive Subsequences
- Split Array into Consecutive Subsequences
- [LeetCode] Split Array into Consecutive Subsequences 将数组分割成连续子序列
- Split Array into Consecutive Subsequences 解法
- Split Array into Consecutive Subsequences问题及解法