链接:https://oj.leetcode.com/problems/longest-consecutive-sequence/
描述:
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)复杂度,考虑空间换时间,两遍遍历。
代码如下:
int longestConsecutive(vector<int> &num) {
int len = num.size();
if(len <= 0) return 0;
map<int, int> hash;
for(int i=0; i < len; ++i)
hash[num[i]] = 1;
int count = 0;
int max = 0;
for(int i=0; i < len; ++i)
{
int curNum = num[i];
if(hash[curNum] == 1)
{
count = 1;
int next = curNum -1;
while( hash[next] == 1)
{
count++;
hash[next--] = 2;
}
next = curNum +1;
while(hash[next] == 1)
{
count++;
hash[next++] = 2;
}
if( max < count )
max = count;
}
}
return max;
}