给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
这道题目可以直接用排序,然后扫一遍解决。这里要在O(N)的时间解决,使用HashSet, 先存一遍数,然后找到某个数,分别从左找数和从右找数,每次找到计数后就删除,这样每个数只找了一遍,时间复杂度为O(N)
/*
* @lc app=leetcode.cn id=128 lang=cpp
*
* [128] 最长连续序列
* 排序判断,时间复杂度O(NlogN)
*/
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> s;
for(auto v:nums)
s.insert(v);
int res = 0;
for(auto v:nums){
if(s.find(v)!=s.end()){
s.erase(v);
int temp = 1;
int cur = v;
while(s.find(cur-1)!=s.end()){
cur--;
s.erase(cur);
}
temp+=v-cur;
cur = v;
while(s.find(cur+1)!=s.end()) {
cur++;
s.erase(cur);
}
temp+=cur-v;
res = max(res,temp);
}
}
return res;
}
};