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
相关推荐
GuWenyue6 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
我叫洋洋7 小时前
C ++ [ hello world ]
c语言·c++·算法
奋发向前wcx8 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
战族狼魂11 小时前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
李剑一11 小时前
你用过网易的将军令嘛?它底层实现账号保护的原理相当简单粗暴
算法
Scott9999HH12 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
中达瑞和-高光谱·多光谱12 小时前
1nm到8nm光谱分辨率,你的应用该选哪款光谱相机?
算法·高光谱·高光谱相机
香辣牛肉饭13 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
旖-旎13 小时前
LeetCode 279:完全平方数(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题