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
相关推荐
じ☆冷颜〃5 分钟前
Picard–Lindelöf定理在CS中的应用:理论框架与算法基础
人工智能·经验分享·笔记·算法·机器学习
不知名的老吴10 分钟前
机器学习评价之基础指标
人工智能·算法·机器学习
Felven10 分钟前
D. Divisible Pairs
算法
源代码杀手11 分钟前
基于ROS2+Gazebo+RIVE的40项计算机视觉前沿机器人项目(含视觉算法原理与源码获取方式)
算法·计算机视觉·机器人
MrZhao40011 分钟前
大模型量化到底在做什么:从浮点数表示到 Qwen FP8 实践
算法
JieE21212 分钟前
LeetCode35. 搜索插入位置:二分查找的基础与细节
javascript·算法
8Qi819 分钟前
LeetCode 188 & 123:股票买卖问题(限制交易次数)—— 联合题解
算法·leetcode·职场和发展·动态规划
KaMeidebaby22 分钟前
卡梅德生物技术快报|细胞周期检测抗原流式分析:参数调试、软件拟合与问题排查
网络·人工智能·python·网络协议·tcp/ip·算法·机器学习
一只齐刘海的猫27 分钟前
【Leetcode】三数之和
数据结构·算法·leetcode
lightqjx27 分钟前
【算法】数据结构_扩展域并查集
数据结构·算法·并查集·扩展域并查集