LeetCode题解——Longest Consecutive Sequence
2016-01-18 19:46
501 查看
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given
The longest consecutive elements sequence is
Your algorithm should run in O(n) complexity.
Subscribe to see which companies asked this question
直观想法:排序:O(nlogn)
创新想法一:从头遍历array, 每遍历一个数i,确定其所在的序列的长度len。建立对应关系imap[i] = len. imap[i]代表数字i所在的序列长度
若i+1,i-1不存在,则iamp[i] = 0;
若i+1, i -1都存在,则imap[i] = imap[i-1] = imap[i+1]=
imap[i-1] + imap[i+1] +1;
若i+1存在,则iamp[i] = imap[i+1] = imap[i+1] +1;
若i-1存在,则imap[i] = imap[i-1] = imap[i-1]+1;
创新想法二:
将原数组放到set里,去除重复数据,遍历set,每取一个数,将set里与之相邻的数都删掉,并计数。
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.
Subscribe to see which companies asked this question
直观想法:排序:O(nlogn)
创新想法一:从头遍历array, 每遍历一个数i,确定其所在的序列的长度len。建立对应关系imap[i] = len. imap[i]代表数字i所在的序列长度
若i+1,i-1不存在,则iamp[i] = 0;
若i+1, i -1都存在,则imap[i] = imap[i-1] = imap[i+1]=
imap[i-1] + imap[i+1] +1;
若i+1存在,则iamp[i] = imap[i+1] = imap[i+1] +1;
若i-1存在,则imap[i] = imap[i-1] = imap[i-1]+1;
class Solution { public: int longestConsecutive(vector<int>& nums) { int n = nums.size(); unordered_map<int,int> imap; int longestConsecutive = 0; for(auto i:nums){ if(imap[i]) continue; longestConsecutive = max(longestConsecutive,imap[i] = imap[i-imap[i-1]] = imap[i+imap[i+1]] = imap[i+imap[i+1]] + imap[i-imap[i-1]] + 1); } return longestConsecutive; } };
创新想法二:
将原数组放到set里,去除重复数据,遍历set,每取一个数,将set里与之相邻的数都删掉,并计数。
class Solution { public: int longestConsecutive(vector<int>& nums) { unordered_set<int> s(nums.begin(), nums.end()); int ans=0; while (!s.empty()) { int val = *s.begin(), k=val+1, len=1; s.erase(val); while (s.find(k)!=s.end()) ++len, s.erase(k++); k=val-1; while (s.find(k)!=s.end()) ++len, s.erase(k--); ans=max(ans, len); } return ans; } };
相关文章推荐
- LeetCode Permutation Sequence
- UI课程(tableView)
- UVA 11404 Palindromic Subsequence 刘汝佳的动归练习
- jd-gui报错INTERNAL ERROR 解决办法
- hdu 1159 Common Subsequence 最大公共子串
- hdu1423 Greatest Common Increasing Subsequence
- 【Elasticsearch】query_string的各种用法
- UI控件ViewPager浅析
- 关于DelayQueue的一些
- 2016/01/18 - start and baseApi
- iOS学习心得——UITableViewCell的复用
- Use Elasticksearch to solve TOP N issue
- iOS学习心得——UITableViewCell的复用
- UIScrollView(二)
- Android Studio一直处于building *** gradle project info的解决办法
- (Question)CSS中position的绝对定位问题
- iOS-UIDynamic(简单介绍)
- 设置UIButton的image title 位置
- UIScrollView(一)
- RTUILabel+正则表达式