[leetcode-128] 最长连续序列

时间:2025-05-12 23:36:21

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 如果不要求算法的时间复杂度为 O(n),排序后遍历即可。沒想出怎么解,看了思路后AC如下,主要是用到Hash映射
public class LongestConsecutiveSequence {
public int longestConsecutive(int[] num) {
//也可以用一个HashMap,Set是一个只包含键值的特殊Map
Set<Integer> set = new HashSet<>();
for(int n : num) {
set.add(n);
}
int max = 1;
for (int n : num) {
if (set.contains(n)) {
int cur = n;
int temp = 1;
while(set.contains(--cur)) {
temp = temp + 1;
set.remove(n);
}
cur = n;
while(set.contains(++cur)) {
temp = temp + 1;
set.remove(n);
}
if (temp>max) {
max = temp;
}
}
}
return max;
}
}