这题说是O(n)算法,我自己用的set集合,按道理来说时间复杂度是O(nlogn),但是也能AC。
看别人都是用hash即unordered_set,这个我不太清楚,可能时间复杂度是O(n)吧:
set代码:
class Solution {
public:
int longestConsecutive(vector<int> &num) {
if(num.size()==0)
return 0;
set<int> s;
for(int i=0;i<num.size();i++){
s.insert(num[i]);
}
int sum=1;
int Max=1;
set<int>::iterator it,ik;
for(it=s.begin(),ik=it,ik++;ik!=s.end();it++,ik++){
if(*ik==*it+1){
sum++;
Max=max(sum,Max);
}
else
sum=1;
}
return Max;
}
};
unordered_set代码:
class Solution {
public:
int longestConsecutive(vector<int> &num) {
unordered_set<int> myset(num.begin(),num.end());
int res=1;
for(int current:num){
if(myset.find(current)==myset.end())
continue;
myset.erase(current);
int prev=current-1,post=current+1;
while(myset.find(prev)!=myset.end()){
myset.erase(prev--);
}
while(myset.find(post)!=myset.end()){
myset.erase(post++);
}
res=max(res,post-prev-1);
}
return res;
}
};