LeetCode热题100-最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n)的算法解决此问题。

题目要求时间复杂度On,如果使用暴力解法时间复杂度为On2,不满足要求。解体的关键点在于避免重复遍历,只从连续序列的 "起点" 开始计数,这样才能保证每个数字只被处理一次,实现真正的 O (n) 效率。

判断「num-1 不存在」,就是筛选出 "序列起点":

  • 1 的 num-1 = 0(不在集合中)→ 是起点,开始计数;
  • 2 的 num-1 = 1(在集合中)→ 不是起点,跳过;
  • 3 的 num-1 = 2(在集合中)→ 不是起点,跳过;
  • 4 的 num-1 = 3(在集合中)→ 不是起点,跳过;
  • 100 的 num-1 = 99(不在集合中)→ 是起点,计数;
  • 200 的 num-1 = 199(不在集合中)→ 是起点,计数;这样每个序列只从起点遍历一次,所有数字总共只被处理一遍,时间复杂度就是 O (n)。
python 复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        nums_set = set(nums)  # 去重很关键

        max_len = 0

        for num in nums_set:
            if num -1 not in nums_set:
                cur_num = num
                cur_len = 1
                while cur_num + 1 in nums_set:
                    cur_num += 1
                    cur_len += 1
                
                max_len = max(cur_len, max_len)
        
        return max_len
相关推荐
threerocks28 分钟前
Jev 入门第一课
算法
西柚研究生1234561 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
hetao17338372 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
午彦琳3 小时前
2026.9.17
数据结构·算法·leetcode
木井巳3 小时前
【记忆化搜索】不同路径
java·算法·leetcode·深度优先·剪枝·推荐算法
怕浪猫4 小时前
从 Windows 换到 Mac 三个月,我真香了
算法·面试·架构
aichitang20245 小时前
前端小skill
前端·人工智能·算法·ai·前端框架
All for pursuit.6 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
木子算法6 小时前
测出来的值会抖:约束和目标带噪声时,「可行」和「更好」该怎么判
人工智能·算法·目标跟踪
圣保罗的大教堂6 小时前
leetcode 1477. 找两个和为目标值且不重叠的子数组 中等
leetcode