Files
LeetCode/哈希/3. 最长连续子序列.md
T
2025-09-28 14:15:54 +08:00

73 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 最长连续子序列
## 题目
给定一个未排序的整数数组 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
示例 3:
输入:nums = [1,0,1,2]
输出:3
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
## 思路
- 连续子序列
- 判断起始点
- 如果左侧没有数字,则为起始点
- 判断长度
- 从起始点向右拓展,知道找不到连续数为止,遍历判断
- 数字的存储
- `HashSet`
## 代码
```java
class Solution {
public int longestConsecutive(int[] nums) {
// New
Set<Integer> set = new HashSet<>();
int res = 0;
// Add
for(int num : nums) {
set.add(num);
}
// Traverse 1
for(int num : set) {
if (!set.contains(num - 1)) {
// Flag
int currentNum = num;
int count = 1;
// Traverse 2
while (set.contains(currentNum + 1)) {
currentNum ++;
count ++;
}
res = Math.max(count, res);
}
}
return res;
}
}
```