题目:
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.
思路:这道题只要先把各个元素放进map中,利用map的自动排序功能将元素升序排列,然后找到连续增长序列最长的长度即可,貌似set也可以,大家可以试试,以下是利用map的代码:class Solution {
public:
int longestConsecutive(vector<int> &num) {
map<int,int> result;
int n=num.size();
for(int i=0;i<n;i++)
result.insert(make_pair(num[i],1));
map<int,int>::iterator iter;
int temp=1,last,m=1;
iter=result.begin();
last=iter->first;
iter++;
for(;iter!=result.end();iter++)
{
if(iter->first-last==1)
{
temp++;
iter->second=temp;
if(temp>m)
m=temp;
}
else
{
temp=1;
}
last=iter->first;
}
return m;
}
};
这个事利用set的代码,亲测可以:
class Solution {
public:
int longestConsecutive(vector<int> &num) {
set<int> result;
int n=num.size();
for(int i=0;i<n;i++)
result.insert(num[i]);
set<int>::iterator iter;
int temp=1,last,m=1;
iter=result.begin();
last=*iter;
iter++;
for(;iter!=result.end();iter++)
{
if(*iter-last==1)
{
temp++;
if(temp>m)
m=temp;
}
else
{
temp=1;
}
last=*iter;
}
return m;
}
};