Split Array into Consecutive Subsequences
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:
- The length of the input is in range of [1, 10000]
参考:https://discuss.leetcode.com/topic/99187/java-o-n-time-o-n-space
思路:O(N)
1. 一个数要么加到一个已经形成的序列里,要么以它为首新开辟一个3个元素序列
所有元素都可以添加到这两种序列中,那么返回true
2. 是先往已有的序列后追加, 还是先自己为首成立一个新序列?
应该是先加入已有序列中的:
如给定:前面有1 2 3 4,后面跟上5 5 6 6 7 7
是先有新序列1 2 3
再将4加入已有序列 1 2 3的后面变成 1 2 3 4
再将5加入已有序列 1 2 3 4 的后面变成 1 2 3 4 5
再有新序列5 6 7
再将6加入已有序列 1 2 3 4 5 的后面变成 1 2 3 4 5 6
再将7加入已有序列 1 2 3 4 5 6 的后面变成 1 2 3 4 5 6 7
不能是
先有新序列 1 2 3
新序列 4 5 6
新序列 5 6 7
最后一个7没地儿放
bool isPossible(vector<int>& nums)
{
unordered_map< int, int > freq; //每个key的出现次数
unordered_map< int , int > afreq;//表示有val个 key,可以和之前已有的连续序列(多个)接上
for ( auto &e : nums )
freq[e]++;
for ( auto &e : nums )
{
// the number has been used
if (freq[e] == ) continue; // the number follow after other sequence
// 表示 key,可以和 之前已有的连续序列(可能有多个) 接上
// 这里是优先把key放到 一个已有的连续序列 后,为什么?
//
else if ( afreq.find(e) != afreq.end() && afreq[e] > )
{
//将e连接到 一个已有的连续序列 之后
freq[e]--;
afreq[e]--; //下一个可以放到 上面这个已有的连续序列 后的数为 e+1(如果有)
afreq[e + ]++;
} // the number form a new sequence
// 这个序列只要 >= 3 即可,那就只判断3个元素的序列
else if ( freq.find(e + ) != freq.end() && freq[e + ] >
&& freq.find(e + ) != freq.end() && freq[e + ]>)
{
// e, e+1, e+2,组成一个新的序列
freq[e]--;
freq[e + ]--;
freq[e + ]--;
// e+3(如果有)可以连接到上面这个新的序列之后
afreq[e + ]++;
} // can't deal with this number
//既不能放到之前已有的连续序列之后,又不能组成一个新的队列
else return false; }
return true;
}
Split Array into Consecutive Subsequences的更多相关文章
- leetcode659. Split Array into Consecutive Subsequences
leetcode659. Split Array into Consecutive Subsequences 题意: 您将获得按升序排列的整数数组(可能包含重复项),您需要将它们拆分成多个子序列,其中 ...
- 【LeetCode】659. Split Array into Consecutive Subsequences 解题报告(Python)
[LeetCode]659. Split Array into Consecutive Subsequences 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id ...
- [LeetCode] Split Array into Consecutive Subsequences 将数组分割成连续子序列
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- [Swift]LeetCode659. 分割数组为连续子序列 | Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- LeetCode Split Array into Consecutive Subsequences
原题链接在这里:https://leetcode.com/problems/split-array-into-consecutive-subsequences/description/ 题目: You ...
- 659. Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- leetcode 659. Split Array into Consecutive Subsequences
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- [LeetCode] 659. Split Array into Consecutive Subsequences 将数组分割成连续子序列
You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...
- [LC] 659. Split Array into Consecutive Subsequences
Given an array nums sorted in ascending order, return true if and only if you can split it into 1 or ...
随机推荐
- Haskell语言学习笔记(71)Semigroup
Semigroup class Semigroup a where (<>) :: a -> a -> a sconcat :: NonEmpty a -> a stim ...
- thread == 票池
public class ThreadDemo2 { public static void main(String[] args){ TicketPool tp = new TicketPool(); ...
- 17.嵌入ace插件
我们想 在problem-detail上具体显示代码 建一个component 叫 editor 将ace集成上去,算是他的画布吧. 支持各种语言 可以reset 提交写好的代码到server端编译 ...
- MVC part4
SpringMVC 注解 @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写,你也可以自己指定, 如下 方法一: @Controller ...
- highstock无图像
如果你的x轴是时间又是世纪秒的话又按以下设置的话,把xAxis的设置去掉试试看, 因为highstock会对世纪秒自动转换的 // xAxis: {// // max: 23, // min: 0, ...
- SqlServer数据库碎片整理——BCC SHOWCONTIG
SQLServer提供了一个数据库命令——DBCC SHOWCONTIG——来确定一个指定的表或索引是否有碎片. 示例: DBCC SHOWCONTIG语法: 显示指定的表的数据和索引的碎片信息. ...
- C# 使用post的方式提交raw格式的数据,数据为json格式,多层嵌套
原文地址:https://cnodejs.org/topic/539ff8a5c3ee0b5820938d60 raw方式使用的是纯字符串的数据上传方式,所以在POST之前,可能需要手工的把一些JSO ...
- SSM商城项目(三)
1. 学习计划 1.商品类目选择 2.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 3.富文本编辑器的使用KindEditor 2. 商品类目选择 2.1. 原型 2.2. 功能分 ...
- mySQL遇到的问题
学习mySQL遇到以下错误. 仔细检查才发现,是字段不一样. 所以插入数据,应该一一对应.
- Linus运行jar包的操作
cd / 返回最顶层文件夹cd home/numa 进入home下的numa文件夹ll 查看当前文加夹下的所有文件ps -ef | grep java ...