Split Array into Consecutive Subsequences 解法
来源:互联网 发布:unity3d 5.5粒子系统 编辑:程序博客网 时间:2024/05/17 23:04
Split Array into Consecutive Subsequences 解法
第七周题目
难度:Media
LeetCode题号:659
题目
Description:
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.
Example1:Input: [1,2,3,3,4,5]
Output: True
Explanation:
You can split them into two consecutive subsequences :
1, 2, 3
3, 4, 5Example2:
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, 5Example3:
Input: [1,2,3,4,4,5]
Output: False
思考
进行两次遍历,第一次找出每个数字出现的频率,第二次切割子串。
通过unordered_map来处理,声明count用来保存数字 i 出现频率,tail用来保存以数字 i 结尾的子串的个数。
第二次循环遍历时,首先判断这个数“i”是否还已经被切割完了
若还在,向后判断他的后一个数是否是结束符,如果是,则后一个数tail值减一,当前数的tail值加一;
如果后一个数不是结束符,说明在他前面当前这个数不能并如果前面的串了,要向后发展。
判断后两个数是否存在,存在的话就抽取了后两个数(让他们的count值减一),然后让第三个数的tail值加一
如果以上情况都不存在,则说明如果构成符合题意的子串,返回false
代码
class Solution {public: bool isPossible(vector<int>& nums) { unordered_map<int, int> tail, count; for (int &i : nums) { count[i]++; } for (int &i : nums) { if (!count[i]) { continue; } count[i]--; if (tail[i-1] > 0) { tail[i-1]--; tail[i]++; } else if (count[i+1] && count[i+2]) { tail[i+2]++; count[i+1]--; count[i+2]--; } else { return false; } } return true; }};
- Split Array into Consecutive Subsequences 解法
- Split Array into Consecutive Subsequences问题及解法
- Split Array into Consecutive Subsequences
- 659. Split Array into Consecutive Subsequences
- 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
- 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 Subsequences(Java)
- leetcode 659. Split Array into Consecutive Subsequences 分割连续序列
- 算法作业系列9——Split Array into Consecutive Subsequences
- Leetcode 649, Split Array to Consecutive Subsequences
- [LeetCode] 贪心算法之 Split Array into Consecutive Subsequence
- bash split string into array
- Array into ranges of consecutive numbers
- bzoj 3043(差分)
- Glide在6.0系统下加载图片失败问题
- 【网络编程】(一)基本模型、套接字之间的连接
- Windows 下安装composer
- openshift rhel7 添加image stream
- Split Array into Consecutive Subsequences 解法
- Q146:PBRT-V3,对系统进行拓展(以添加一个新的Integrator为例)
- Linux内核版本和发行版本
- 【慕课网_性能优化之MySQL优化_学习】【07】
- Linux各常用命令缩写
- Linux网络编程——Unix本地套接字
- php开发地图
- 1021. 个位数统计 (15)
- 深入理解Java的接口和抽象类