题目要求
O
(
N
)
O(N)
O(N) 时间内找出最长连续序列,不能用排序,可以利用map、set加速。
遍历 set 中的元素,不断向上找比它大1的数字,统计序列并记录长度。
注意:遍历过程中会遇到,序列中元素的重复访问造成冗余,应当加一限制条件
if(set.count(current - 1) == 0)
这样能够保证:
- 当前元素
current
是连续序列的起点 - 已经访问过的序列中的元素,不会被重复访问
附上代码:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
set<int> pool;
int out = 0;
for(auto x : nums) pool.insert(x);
for(auto x : pool) {
if(!pool.count(x-1)){
int curr = 1;
while(pool.count(x+1)){
curr++;
x++;
}
out = max(out, curr);
}
}
return out;
}
};