LeetCode题解(Week 13):128. Longest Consecutive Sequence
来源:互联网 发布:ubuntu怎么注销用户 编辑:程序博客网 时间:2024/06/03 17:33
原题目:
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.
中文大意:
给定一个无序的整形数组,找到数组中的最长连续序列。例如给定[100,4,200,1,3,2]那么最长的连续序列是[1,2,3,4],这时候返回4。
题解1:
class Solution {public: int longestConsecutive(vector<int>& nums) { if(nums.size()==0) return 0; set<int> s; for(int i = 0 ; i < nums.size();i++) s.insert(nums[i]); // 将所有的元素都压到集合中,形成有序集 set<int>::iterator it = s.begin(); int prevnum = *it; it++; int currnum = *it; // 检查连续性 int curr = 1; int maxlen = 1; for (; it!=s.end(); ++it) { currnum = *it; if(currnum==prevnum+1) curr++; else { maxlen = maxlen < curr ? curr : maxlen; curr = 1; } prevnum = currnum; cout<<*it<<endl; // if(it) } maxlen = maxlen < curr ? curr : maxlen; // cout << maxlen <<endl; return maxlen; }};
题解1思路:
- 首先将数组中的所有元素放到一个set中,形成了一个有序集合
- 然后遍历这个有序集合,从第二个元素开始,并初始化一个maxlen用来保存结果
- 遍历到的当前元素如果不等于上一个元素加1,证明连续性已经被打破,maxlen = max(maxlen,currlen),currlen表示当前字符结尾的连续序列的长度
- 遍历完所有元素后,再执行一次maxlen = max(maxlen,currlen),因为如果在整个序列都是连续的,没有被中断的情况下,maxlen = max(maxlen,currlen)是不会被执行的。
- 如[0,1,2,3,4]当执行到4的时候,currlen = 5,但是maxlen = 1(初始化长度),但如果最后不执行maxlen = max(maxlen,currlen),maxlen的值是不会变的
- 这样做的时间复杂度其实严格上来讲为O(nlogn)因为在插入到set中需要额外的时间
题解2:
class Solution {public: int longestConsecutive(vector<int>& nums) { set<int> s(nums.begin(),nums.end()); int ans = 0, last = *s.begin()-1, len = 0; for(auto i:s) { if (i-last == 1) ans = max(ans,++len); else len = 1; last = i; } return ans; }};
题解2思路:
- 与题解1类似,一开始将数组中的所有元素都放到set中
- 遍历set中的元素,这里有一个比较巧妙的做法:将上一个数last的值设为“第一个元素的值 - 1”
- 如果当前元素比last的值大1,则更新maxlen的值
- 如果上一点不成立,则将当前的长度len设为1
阅读全文
0 0
- LeetCode题解(Week 13):128. Longest Consecutive Sequence
- LeetCode week 13 : Longest Consecutive Sequence
- LeetCode Algorithms 128. Longest Consecutive Sequence 题解
- leetcode题解-128. Longest Consecutive Sequence
- leetcode题解-128. Longest Consecutive Sequence
- LeetCode 题解(93): Longest Consecutive Sequence
- LeetCode题解: Longest Consecutive Sequence
- LeetCode题解:Longest Consecutive Sequence
- LeetCode题解——Longest Consecutive Sequence
- [LeetCode]128.Longest Consecutive Sequence
- [Leetcode] 128. Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- [LeetCode]128. Longest Consecutive Sequence
- gis地图图层(前台)
- jQuery 事件方法
- win7系统安装网银助手时提示您尚未正确安装错误的两种解决方法图文教程
- TCP-IP 第四版 第一章 引言
- oracle 下载
- LeetCode题解(Week 13):128. Longest Consecutive Sequence
- JAVA中常用的4种线程池的使用
- 【java基础】JDBC实现增删改查
- java面试常用算法题深入剖析之兔子繁殖问题
- opencv2 预测算法之Kalman滤波器(KalmanFilter)
- linux线程系列(3)线程创建
- could not calculate build plan:插件版本问题
- 学习笔记一--Weex介绍
- Binder