Longest_consecutive_sequence
2024-06-02 13:57:35
目录
- 1.问题描述
- 2.问题分析
- 3.代码
- 4.总结
1.问题描述
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.
2.问题分析
如果允许O(nlogn)的复杂度,那么可以先排序,本题要求O(n)。
由于序列里的元素是无序的,又要求O(n),可以使用哈希表。
用一个哈希表unordered_map<int, bool>used记录每个元素是否使用,对每个元素,以该元素为中心,网左右扩张,直到不连续为止,记下最长的长度。
3.代码
class Solution{public:int longestConsecutive(const vector<int> &num){unordered_map<int, bool> used; //使用unordered_map存vector中数据,以及是否被访问到for(auto i : num) used[i] = false;//每一个位置初始化为falseint longest = 0; //将最长值初始化为0for(auto i : num) {if(used[i]) continue; //访问过,跳过 used[i] = true; //设置当前值为访问过int length = 1; //长度初始化为1for(int j = i + 1;used.find(j) != used.end();++j) //从i出发,向右寻找更长连续序列{used[j]=true;++length;}for(int j = i-1; used.find(j) != used.end();--j) //从i出发,向左寻找更长连续序列{used[j] = true;++length;}longest = max(longest, length); //更新最长子序列长度}return longest;}
};
4.总结
本题的关键在于:
1、使用unordered_map,记录数字是否被访问过,是则标记为true;
2、以当前值为中心,向左右两边扩展寻找连续子序列,记录最大长度。
Longest_consecutive_sequence相关推荐
- Leetcode_128_Longest Consecutive Sequence
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43854597 Given an unsorted arra ...
最新文章
- IIS6 MVC3 配置
- linux shell中文显示
- ASP读取ini文件的实现方法
- 剑桥的商学院硕士的创业项目找我做tech lead,稳得一批
- 进程控制 (二) Others
- mysql mgr 配置_MySQL5.7 MGR安装配置
- linux-权限管理acl高级
- python写一个app接收摄像头传输的视频_如何使用Python中的tcp套接字发送和接收网络摄像头流?...
- Qt connect()的第五种重载[=](){}
- 前端修炼の道 | 如何成为一名合格前端开发工程师?
- 容器中Bean的生命周期
- jw player 5去掉share,info,embed页面
- 《普通心理学》读书笔记
- 服务器芯片将填补中国空白,3年迭代4次技术,芯片黑马填补国产空白,韩企的垄断被打破...
- 服务器本地存储文件,云服务器存储放在本地
- 【office 2007~office 2019】Excel日期选择控件插件安装
- unity占用太多c盘空间
- Hadoop-HFDS知识点总结
- 转载:java面试题(一)
- 【2011年全国试题3】已知循环队列存储在一维数组A[0…n-1],且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列为空,且