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.
参考:http://www.acmerblog.com/leetcode-solution-longest-consecutive-sequence-6300.html
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int,bool> visited;//记录nums中元素访问情况
int ret=0;
for(auto i:nums) visited[i]=false;
for(auto i:nums){
if(visited[i]) continue;//访问过了就不用计算了
int len=1;
visited[i]=true;//!!!!不能忘
//计算比i 大的连续数据的个数
int j=i;//给第二个循环用的,第一个循环把i改变了。。!!!!!
while(visited.count(++i)>0){
visited[i]=true;
len++;
}
//计算比i 小的连续数据的个数
while(visited.count(--j)>0){
visited[j]=true;
len++;
}
ret=ret<len?len:ret;
}
return ret;
}
};