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

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

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

相关推荐
Sinosecu-OCR10 分钟前
文通OCR技术深度解析:自研算法如何搞定复杂场景识别?
算法·ocr·ocr识别系统
CQU_JIAKE32 分钟前
8.5【A】
数据结构·算法
ESBK20251 小时前
学术邀约|CMICA 2026 第二届计算方法、智能控制与航空航天国际会议
大数据·人工智能·算法·飞行器·智能控制·航空航天·计算
无bug代码搬运工1 小时前
LeetCode 42 接雨水:双指针解法详解
算法·leetcode·职场和发展
Jasmine_llq1 小时前
《P13016 [GESP202506 六级] 最大因数》
数据结构·算法
白狐_7981 小时前
考研408算法设计题保命策略:链表专题暴力解法精讲(2015 & 2019真题实战)
考研·算法·链表
fangpin2 小时前
GPU编程2: 并行策略
算法
碧海银沙音频科技研究院2 小时前
8基于BES2700IHC数字助听器系统开发
嵌入式硬件·算法
HZZD_HZZD2 小时前
智能电表选CoAP还是MQTT?合众致达万表实测:CoAP省流17.3%、续航提升38%,附报文拆解与选型矩阵
算法
linux-hzh3 小时前
百日算法修炼 · Day 05
java·算法