题目:

解析:
HashSet + 智能遍历
去重与快速查找
- 将所有数字放入 HashSet(O(1) 查找)
- 同时去除了重复数字(重复数字不影响连续序列长度)
关键优化:只从序列起点开始查找
- 对于一个数字 num,如果 num-1 存在于集合中,说明 num 不是某个连续序列的起点
- 我们只从序列的最小值开始查找
- 这样可以确保每个连续序列只被遍历一次
算法步骤
-
将所有数字存入 HashSet
-
遍历 HashSet 中的每个数字 num
-
如果 num-1 不在 HashSet 中(num 是序列起点)
- 初始化当前数字 current = num
- 初始化当前序列长度 currentStreak = 1
- 循环检查 current+1 是否在 HashSet 中,如果在,current++,currentStreak++
- 更新最长序列长度
- 返回最长序列长度
代码:
java
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}
int longestStreak = 0;
for (int num : num_set) {
if (!num_set.contains(num - 1)) {
int currentNum = num;
int currentStreak = 1;
while (num_set.contains(currentNum + 1)) {
currentNum += 1;
currentStreak += 1;
}
longestStreak = Math.max(longestStreak, currentStreak);
}
}
return longestStreak;
}
}
补充: