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

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

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

相关推荐
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章81-弯脚检测
图像处理·人工智能·opencv·算法·计算机视觉
kkeeper~5 小时前
0基础C语言积跬步之自定义类型联合和枚举
c语言·开发语言·算法
昵称好难啊5 小时前
4.OpenClaw源码解析_路由的概念
人工智能·算法
Bingorl5 小时前
机器学习之KNN算法
人工智能·算法·机器学习
muddjsv5 小时前
《算法导论》入门学习路径:从零基础到系统掌握
学习·算法
KaMeidebaby6 小时前
卡梅德生物技术快报|组蛋白乙酰化修饰调控动脉粥样硬化的分子机制及中药表观干预研究
网络·人工智能·网络协议·tcp/ip·算法
Fms_Sa6 小时前
分治法—最大子段问题
算法·c#
Galerkin码农选手6 小时前
awq_marlin和gptq_marlin量化算法简要介绍
算法
buhuizhiyuci6 小时前
【算法篇】动态规划——斐波那契数列模型
算法·动态规划
棱镜研途6 小时前
学习笔记丨模式识别与机器学习5大核心赛道解析(IC-IPPR 2026)
人工智能·神经网络·算法·机器学习·模式识别·学术会议·智能计算