LeetCode: Longest Consecutive Sequence [128]
【题目】
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
【题意】
给定一个未排序的整数数组。找长度最长的连续整数串序列。并返回长度。 复杂度要求O(n)
【思路】
O(n)不一定是one pass, 脑子里总是有这么种固定思维,自己给自己挖了个坑。O(kn)也是O(n), 仅仅要k是常数。
要找连续串,又不能排序,那我们要构造一个类列表结构把连续的数串起来。
那么怎么串呢?非常显然,给定一个数N。那我们须要知道他的前一个数prev和它的后一个数next是否存在,假设存在我们就能够串到prev或者next, 假设不存在则连续串就结束鸟。我们用一个map来表示这样的前后继关系。
prev=N-1; next=N+1; 假定N是存在于数组中的。则map[N]=1
假设prev也在数组中,则map[prev]=1, 否则map[prev]=0
假设next也在数组中,则map[next]=1, 否则map[next]=0
我们对数组进行两遍扫描:
第一遍扫描是我们生成前后关系map
第二遍扫描利用前后关系恢复连续串,恢复过程中相应数的map[i]都置为0,避免反复恢复
【代码】
class Solution {
public:int longestConsecutive(vector<int> &num) {int size=num.size();if(size==0)return 0;//第一遍扫描建立前后关系mapmap<int, int> exist;for(int i=0; i<size; i++){exist[num[i]]=1;if(exist[num[i]-1]!=1)exist[num[i]-1]=0;if(exist[num[i]+1]!=1)exist[num[i]+1]=0;}//第二遍扫描int maxLength=0;for(int i=0; i<size; i++){if(exist[num[i]]==1){//恢复串int length=1;int number=num[i]-1;while(exist[number]==1){length++; exist[number]=0; number--;}number=num[i]+1;while(exist[number]==1){length++; exist[number]=0; number++;}if(length>maxLength)maxLength=length;}}return maxLength;}
};
LeetCode: Longest Consecutive Sequence [128]相关推荐
- LeetCode:Longest Consecutive Sequence
题目链接 Given an unsorted array of integers, find the length of the longest consecutive elements sequen ...
- [LeetCode] Longest Consecutive Sequence 求解
为什么80%的码农都做不了架构师?>>> 题目 Given an unsorted array of integers, find the length of the long ...
- leetcode 128. Longest Consecutive Sequence | 128. 最长连续序列(Java)
题目 https://leetcode.com/problems/longest-consecutive-sequence/ 题解 方法1:HashMap 解法,O(n^2) 如下图,假设 n=4 被 ...
- leetcode Longest Consecutive Sequence
#include <iostream> #include <vector> #include <unordered_map>// 时间复杂度是O(n), 空间复杂度 ...
- LeetCode: Longest Consecutive Sequence
想到map了,可惜没想到用erase来节省空间,看了网上答案 1 class Solution { 2 public: 3 int longestConsecutive(vector<int&g ...
- [leetcode]Longest Consecutive Sequence
这道题目一看就去翻答案了,因为以前见过,知道并查集可以用来做分组,但这样的题目真的要并查集么?想想也是HashSet之类就能搞定么.果然是HashMap而不是HashSet.下面这个解法我比较容易理解 ...
- 298. Binary Tree Longest Consecutive Sequence
题目: Given a binary tree, find the length of the longest consecutive sequence path. The path refers t ...
- LeetCode 128. 最长连续序列(Longest Consecutive Sequence)
题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1 ...
- 128. Longest Consecutive Sequence
Title 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [ ...
最新文章
- MySQL集群系列2:通过keepalived实现双主集群读写分离
- iOS中EXC_BAD_ACCESS解决办法
- 进化吧!我的C++!!
- iOS开发之ReplayKit框架学习
- word粘贴至html特殊字符 粘贴后可能为乱码
- 代码的世界里的一群精神病人
- 这本 Kindle 排名第一的 Python 3 入门书,火遍了整个编程圈!| 码书
- 流媒体协议地址获取 rtmp
- Git:git commit后撤销commit 提交
- CAXA图文档2007服务器端,CAXA图文档客户端系统管理员操作.doc
- 如何将App程序发布到苹果App Store
- 线性代数学习笔记(二十八)——齐次方程组的解
- android三星打印插件,三星打印服务插件 Samsung Print Service for Android
- 三态门及其在I2C总线中的应用_普中_89C52单片机
- 精度检验方法(之二分类)
- k8s dashboard安装
- Recipient List camel并行
- WINCE 车机系统介绍
- 基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?
- 服务器系统日志事件id41,系统莫名重启,系统相关日志中出现事件ID:41,1001,6008,请问这是什么原因导致...
热门文章
- 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程
- android自定义minitype,MiniType部类以及扩展名
- 【星球知识卡片】换脸算法和人脸驱动都有哪些核心技术,如何对其长期深入学习...
- 【NLP机器学习基础】从线性回归和Logistic回归开始
- 【有三说深度学习】深度学习前夕
- 全球及中国民办教育行业规模预测与发展对策建议报告2022版
- 我写的一个给time_t赋值的小函数
- 打造微量元素产业-丰收节交易会·李喜贵:签约南国健康产业
- Django中的日期和时间格式 DateTimeField
- 天天沉迷于皇上本宫的都是sb