1. 问题背景与核心挑战
这道题目要求我们在未排序的整数数组中找到最长连续序列的长度。比如给定数组[100,4,200,1,3,2],最长的连续序列是[1,2,3,4],所以返回长度4。题目要求算法时间复杂度为O(n),这就排除了先排序再遍历的常规思路(排序需要O(nlogn)时间)。
在实际开发中,类似场景其实很常见。比如在用户行为分析中,我们需要找出用户连续登录的天数;在电商系统中,要识别连续下单的用户序列;在游戏数据统计里,要计算玩家连续完成任务的次数。这类问题的共性是都需要在无序数据中快速找出连续元素构成的序列。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 哈希表解法精析
2.1 基础思路拆解
最直观的暴力解法是对每个数字,都尝试向后查找连续的数字,但这种时间复杂度是O(n²)。要实现O(n)时间复杂度,必须避免重复检查。哈希表(在Python中是集合set)的O(1)查询特性正好满足需求。
核心思路是:
- 先将所有数字存入哈希集合
- 对于集合中的每个数字,检查它是否是某个连续序列的起点(即num-1不在集合中)
- 如果是起点,就不断检查num+1是否在集合中,统计序列长度
- 记录遇到的最大长度
2.2 关键实现细节
python复制def longestConsecutive(nums):
num_set = set(nums)
max_length = 0
for num in num_set:
# 检查是否是序列起点
if num - 1 not in num_set:
current_num = num
current_length = 1
# 向后扩展序列
while current_num + 1 in num_set:
current_num += 1
current_length += 1
max_length = max(max_length, current_length)
return max_l
