【Leetcode Hot 100 题目精华解析2025】python自用 --128.最长连续序列
128.最长连续序列
- 解题思路
- 代码实现
- 核心要点
要实现 O(n) 时间复杂度,我们需要避免排序(排序是 O(n log n)),通常的做法是用 哈希集合 (set) 进行常数时间的查找。
解题思路
1、去重 + 放入哈希集合
我们用 set(nums)
保存所有数字,这样查找一个数是否存在是 O(1)。
2、只从“连续序列的起点”开始向后找
如果 x - 1
不在集合中,说明 x
是一个连续序列的开头。(if)
然后从 x
往后找 x+1, x+2, ...,
直到找不到为止,计算长度。(while)
3、记录最大长度
在遍历所有起点时更新最大值。(max)
代码实现
def longestConsecutive(nums):if not nums:return 0num_set = set(nums)longest = 0for num in num_set:# 只从连续序列的起点开始if num - 1 not in num_set:current = numlength = 1# 向后找连续的数字while current + 1 in num_set:current += 1length += 1longest = max(longest, length)return longest
测试
print(longestConsecutive([100, 4, 200, 1, 3, 2])) # 4
print(longestConsecutive([0, 3, 7, 2, 5, 8, 4, 6, 0, 1])) # 9
print(longestConsecutive([1, 0, 1, 2])) # 3
核心要点
O(n) 的关键是:
- 用 set 做 O(1) 查找
- 只从“连续序列的起点”开始向后找,避免重复计数空间复杂度为 O(n)(哈希集合存储所有元素)。