128_最长连续序列

128_最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例1:

输入:nums = [100,4,200,1,3,2]

输出:4

解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]

输出:9

思路

最基本的思路就是排序,不过排序的时间复杂度为O(NlogN),想找到连续序列,首先要找到这个连续序列的开头元素,然后递增,看后面还有多少个元素还在Nums中,

我们可以用空间换时间,把数组元素放到哈希集合中,然后去寻找连续序列的第一个元素,即可在O(N)时间内找到答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> num_set;
for(int num : nums) {
num_set.insert(num);
}
int res = 0;
for(int num : nums) {
// num 不是连续子序列的第一个,跳过
if(num_set.count(num - 1)) {
continue;
}
// num 是连续子序列的第一个 开始向上计算连续子序列的长度
int curNum = num;
int curLen = 1;
while(num_set.count(curNum + 1)) {
curNum += 1;
curLen += 1;
}
// 更新最长连续子序列的长度
res = max(res, curLen);
}
return res;
}
};