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 是数组的长度。需要使用哈希表来存储元素。

代码实现

方法:哈希表

python 复制代码
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) 的时间内判断一个元素是否存在,从而高效地找到最长连续序列。

哈希表的核心思想是:将数组中的所有元素存储在哈希表中,然后遍历每个元素,当遇到一个连续序列的起点时,计算该连续序列的长度,并更新最长连续序列的长度。

这种方法不仅适用于最长连续序列问题,还可以应用于许多其他需要快速查找元素的问题。掌握哈希表的使用,对于解决这类问题非常重要。

相关推荐
雪碧聊技术7 小时前
上午题_算法
算法·软考·软件设计师
naturerun7 小时前
从数组中删除元素的算法
数据结构·c++·算法
he___H7 小时前
接雨水----解
leetcode
斯内科8 小时前
四胞胎素数:找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数,例如 11、13、17、19
算法·质数·素数·四胞胎素数
Hello.Reader8 小时前
算法基础(十二)——主方法:快速求解常见递归式
算法
小O的算法实验室9 小时前
2026年IEEE TITS,面向按需外卖配送调度的特定问题知识与基于学习元启发式算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
加勒比海带669 小时前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测
洛水水9 小时前
【力扣100题】23. 螺旋矩阵
算法·leetcode·矩阵
影sir9 小时前
不同测试数据下,该如何选择算法
算法·深度优先
潇湘散客10 小时前
CAX软件插件化设计实现牛刀小试
c++·算法·图形学·opengl