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

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

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

相关推荐
企业数字化笔记2 分钟前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!41 分钟前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小郎君6583 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧3 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm3 小时前
40 二叉树的直径
c++·leetcode
Shimeri4 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
Evand J4 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang4 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖5 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy5 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化