LeetCode 128. Longest Consecutive Sequence 题解

张开发
2026/6/2 7:47:54 15 分钟阅读
LeetCode 128. Longest Consecutive Sequence 题解
LeetCode 128. Longest Consecutive Sequence 题解题目描述给定一个未排序的整数数组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解题思路方法哈希表思路使用哈希表来存储数组中的所有元素这样可以在 O(1) 的时间内判断一个元素是否存在遍历数组中的每个元素如果当前元素是一个连续序列的起点即current - 1不在哈希表中则开始计算以当前元素为起点的连续序列的长度不断检查current 1是否在哈希表中如果在继续增加长度更新最长连续序列的长度复杂度分析时间复杂度O(n)其中 n 是数组的长度。每个元素最多被访问两次。空间复杂度O(n)其中 n 是数组的长度。需要使用哈希表来存储元素。代码实现方法哈希表class Solution: def longestConsecutive(self, nums: List[int]) - int: if not nums: return 0 # 使用哈希表存储数组中的所有元素 num_set set(nums) longest_streak 0 for num in num_set: # 如果当前元素是一个连续序列的起点即 num - 1 不在哈希表中 if num - 1 not in num_set: current_num num current_streak 1 # 不断检查 current_num 1 是否在哈希表中 while current_num 1 in num_set: current_num 1 current_streak 1 # 更新最长连续序列的长度 longest_streak max(longest_streak, current_streak) return longest_streak测试用例测试用例 1输入nums [100,4,200,1,3,2]输出4测试用例 2输入nums [0,3,7,2,5,8,4,6,0,1]输出9测试用例 3输入nums []输出0测试用例 4输入nums [1]输出1总结本题是哈希表的经典应用问题主要考察对哈希表的理解和使用。通过使用哈希表我们可以在 O(1) 的时间内判断一个元素是否存在从而高效地找到最长连续序列。哈希表的核心思想是将数组中的所有元素存储在哈希表中然后遍历每个元素当遇到一个连续序列的起点时计算该连续序列的长度并更新最长连续序列的长度。这种方法不仅适用于最长连续序列问题还可以应用于许多其他需要快速查找元素的问题。掌握哈希表的使用对于解决这类问题非常重要。

更多文章