这题说是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;
}
};

本文介绍了一种寻找最长连续整数序列的算法实现,通过两种不同的数据结构——有序集合(set)与哈希表(unordered_set),对比了它们的时间复杂度与实现细节。使用哈希表的方法能够达到O(n)的时间复杂度,适用于大数据量场景。
1885

被折叠的 条评论
为什么被折叠?



