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 ...
随机推荐
- python的解构
今天学习python看到python的解构,觉得很有用就写下来,防止自己忘了 首先定义个列表 然后我们来解构 字典呢?字典需要两个*号才能解构 这样调用不明显 来个明显点的 上面错误是,你定义了一个形 ...
- ORACLE数据库 常用命令和Sql常用语句
ORACLE 账号相关 如何获取表及权限 1.COPY表空间backup scottexp登录管理员账号system2.创建用户 create user han identified(认证) by m ...
- mySQL遇到的问题
学习mySQL遇到以下错误. 仔细检查才发现,是字段不一样. 所以插入数据,应该一一对应.
- css-background-image 背景图片太大或太小
.zoomImage { background-image:url(images/yuantiao.jpg); background-rep ...
- ggplot2
应用与: http://www.cnblogs.com/batteryhp/p/5232353.html 由于python中matplotlib包的画图功能比较基本,不怎么炫酷,所以想用R中的ggpl ...
- 签名Cookie
[签名Cookie] set-cookie时加上防篡改验证码. 如: user_name=alex|bj95ef23cc6daecc475de 防篡改验证码的生成规则可以很简单:md5(cooki ...
- 二:python 对象类型概述
1,为什么使用内置类型: a)内置对象使程序更容易编写 b)内置对象是扩展的组件 c)内置对象往往比定制的数据结构更加高效 d)内置对象是语言的标准的一部分 2,python 的主要内置对象 对象类 ...
- 从上往下打印二叉树(python)
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # ...
- 第二章 向量(d1)有序向量:唯一化
- LibreOJ 6285. 数列分块入门 9
题目链接:https://loj.ac/problem/6285 其实一看到是离线,我就想用莫队算法来做,对所有询问进行分块,但是左右边界移动的时候,不会同时更新数字最多的数,只是后面线性的扫了一遍, ...