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),所以只能使用容器map的find和erase。否则可以排序之后按顺序查找,但是那样的时间复杂度为O(n2)。
代码如下:
class Solution {
public:
int longestConsecutive(vector<int> &num) {
map<int, int> hmap;
hmap.clear();
int n = num.size();
for(int i=0; i<n; i++)
{
hmap.insert(pair<int, int>(num[i], i));
}
int result=0, cnt=0;
map<int, int>::iterator it;
for(int i=0; i<num.size(); i++)
{
int cur = num[i];
it = hmap.find(num[i]);
cnt++;
if(it!=hmap.end()){
map<int, int>::iterator iter;
while(1)
{
iter = hmap.find(++cur);
if(iter==hmap.end())
break;
cnt++;
hmap.erase(iter);
}
cur=num[i];
while(1)
{
iter = hmap.find(--cur);
if(iter==hmap.end())
break;
cnt++;
hmap.erase(iter);
}
if(result<cnt)
result = cnt;
cnt=0;
}
cnt=0;
}
return result;
}
};