Leetcode 128 最长连续序列

【中等】力扣算法题解析LeetCode128:最长连续序列 本文提出了一种高效算法,用于在未排序整数数组中寻找最长连续数字序列的长度。通过哈希集合存储元素实现O(1)查询,仅处理序列起点减少了冗余计算。算法首先识别连续序列的最小元素作为起点,然后向后扩展计算序列长度,最终返回全局最大值。该方法时间复杂度为O(n),空间复杂度为O(n),能够处理10^5量级的数据,实测执行时间仅14ms,内存消耗58.6MB。关键优化在于跳过非起点元素,避免重复计算,保证线性时间复杂度。 阅读详情

题目信息

LeetCode地址: . - 力扣(LeetCode)

题目理解

题目要求O(n)的时间复杂度,也就不能使用排序或者暴力枚举的方法解题。

暴力枚举的缺陷在于重复计算。

我们通过以下数列来说明存在哪些重复计算:

 4,3,2,1。

第一个数是4, 4+1=5, 5不存在,累加结束;最大连续长度是1

第二个数是3,3+1=4,4存在;4+1=5, 5不存在,累加结束;最大连续长度是2

第三个数是2, 2+1=3,3+1=4,4+1=5, 5不存在,累加结束;最大连续长度是3

第四个数是1,1+1=2,2+1=3,3+1=4,4+1=5, 5不存在,累加结束;最大连续长度是4

可以看到,每一个更小的数载计算连续长度时,都重复进行了比他大一个数的计算过程。

为了尽可能的延后这个计算,我们可以:如果当前数的减1的数存在,则先跳过这个数,否则进行累加计算。

第一个数是4, 4-1=3, 3存在,跳过这个数。

第二个数是3,3-1=2,2存在;跳过这个数。

第三个数是2, 2-1=1, 1存在;跳过这个数。

第四个数是1,1-1=0 0不存在,开始计算累加长度:1+1=2,2+1=3,3+1=4,4+1=5, 5不存在,累加结束;最大连续长度是4

可以看到,这样调整后的计算过程没有任何一步重复。

同时,我们也可以通过反证法轻而易举的证明该方法一定能够得到最大长度。

先假设我们得到的结果是largest, 而存在一种更长的数列betterArray={m1, m2, m3... mn}能够做到mn-m1+1= bigger, 而bigger > largest.

而通过我们的方法,一定能够捕捉并跳过m2,m3...到mn, 而从m1开始计算长度,故 一定能满足

largest >= (mn-m1+1). 所以假设一定不成立,故证明我们的方法一定能得到最优解。 

写法1

public int longestConsecutive(int[] nums) {
        int max = 0;
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        for (int num: nums) {
            if (!set.contains(num-1)) {
                int current = 1;
                while (set.contains(++num)) {
                    current++;
                }
                max = Math.max(max, current);
            }
        }
        return max; 
    }
【01】Canoe零基础手把手教学 --- Canoe安装 Canoe零基础手把手教学 阅读详情

相关推荐

Unity实时控制佳能单反拍照全流程(附EDSDK 3.6.1配置避坑指南)

本文详细介绍了在Unity中实时控制佳能单反相机进行拍照的完整流程,重点提供了EDSDK 3.6.1的配置与避坑指南。内容涵盖从SDK获取、环境搭建、相机初始化、参数设置到实现拍照控制,并深入探讨了实时取景的延迟优化方案与资源管理,旨在帮助开发者高效集成专业相机,提升AR/VR及摄影测量等应用的视觉输入质量。

go5gopher的博客 184

力扣LeetCode 128题:最长连续序列

题目: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 分析 要找 连续序列 的长度,从结果可以看出,主要是为了排序,排序之后,遍历结果就可以进行连续长度的更新。 但是排序的算法,即使快排的时间复杂度也有O(nlogn),不满足要求。 这种时候一般就会想到借助哈希表,也就是类似计数排序,先来试试,用数组来做哈希表,下标做n

LifeGoesOn 1429

嘉立创EDA报错:元件引脚与焊盘未对应报错解决记录

原件引脚与焊盘未对应报错解决方法,一文总结!

2303_77013775的博客 1万+

力扣(LeetCode)100题:128.最长连续序列

特点说明时间复杂度 O(n)每个数字最多被访问两次(一次在外层循环,一次在while中),均摊 O(1)空间复杂度 O(n)需要额外集合存储去重后的数字无需排序完全基于哈希查找,避免 O(n log n) 排序开销自动去重集合天然消除重复元素干扰。

sweet_ran的博客 575

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1008

【2026年华为暑期实习(非AI方向(通软&嵌软&测试&算法&数据科学))-4月8日-第一题- 包裹的编码】(题目+思路+Java&C++&Python解析+在线测试)

摘要:该问题要求将给定的十进制整数N转换为混合进制编码字符串,并处理回文检测。首先根据N的符号位确定编码首位(0或1),然后按输入的进制序列依次对N的绝对值进行取余和整除操作,得到编码数组。将数组元素转换为字母后生成字符串,若字符串为回文则添加"(palindrome)"后缀;否则输出最长回文子串(字典序最小)。算法采用中心扩展法检测回文,时间复杂度为O(L²),空间复杂度为O(L),其中L为字符串长度。

m0_73659489的博客 130

LeetCode 力扣 128. 最长连续序列

题目描述(困难难度) 给一个数组,求出连续的数字最多有多少个,时间复杂度要求是 O(n)。 解法一 首先想一下最直接的暴力破解。我们可以用一个 HashSet 把给的数组保存起来。然后再考虑数组的每个数,比如这个数是 n,然后看 n + 1 在不在 HashSet 中,然后再看 n + 2 在不在,接下来 n + 3、n + 4 直到在 HashSet 中找不到,记录当前的长度。然后继续考虑下一...

wind_liang的博客 1017

glibc: GLIBC_2.28‘ not found

这个时候,应该怎么解决,因为当前运行的机器是低版本,而程序是高版本,解决方法,或者是将程序降级,或者将当前系统升级。在一个glibc的接口版本是GLIBC_2.25的lab上,运行不了在2.28上编译的程序。看哪一个方便,但是不能通过 临时复制libc.so 文件来解决,因为会遇到下面的错误。所以如果是简单解决就是按照低版本的应用程序,来适配当前系统的glibc版本。比如下面的程序运行提示。

mzhan017的博客 2407

LeetCode第128题_最长连续序列

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。

qq_40263592的博客 2095

「UG/NX」Block UI 曲线收集器CurveCollector

曲线收集器块用于选择一条或多条曲线,包括通过选择意图连接的末端曲线链。曲线选择意图用于此块,但它不支持“交点处停止”、“跟随圆角”、“中间链”和“特征内链”等规则选项。

何曾参静谧的博客 1091

CUDA内核反汇编实战:用cuobjdump解锁SASS指令的奥秘

本文详细介绍了CUDA内核与SASS指令的关系,以及使用cuobjdump工具进行反汇编分析的方法。主要内容包括:1. CUDA内核的基本概念及其在GPU并行计算中的重要性;2. SASS指令作为底层汇编指令的关键作用;3. cuobjdump工具的安装配置和使用方法;4. 通过数组加法实例演示反汇编过程;5. 深入分析SASS指令格式、分类和执行流程;6. 两个实际案例展示性能优化和问题排查的应用。文章为开发者提供了深入理解CUDA程序底层执行机制的有效途径。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 439

力扣LeetCode 128. 最长连续序列

力扣LeetCode 128. 最长连续序列

weixin_63171335的博客 223

【Python爬虫(1)】专栏开篇:夯实Python基础

要想熟练掌握 Python 爬虫技术,扎实的 Python 基础是必不可少的。这就好比建造高楼大厦,Python 基础就是那稳固的基石。只有打好了这个基础,我们才能在爬虫的学习道路上稳步前行,理解并运用各种爬虫技术和框架。

邓邓子的博客 2026

每日一题一一Leetcode128. 最长连续序列 - 力扣

好,那么如果num-1不存在,那么说明num有资格,作为数字连续序列的开头,我们就不断询问num+1,num+2,num+3,……在不在集合中,看看什么时候停下来,然后,维护最长序列的长度即可。问这个的目的是判断当前这个num有没有资格作为数字连续序列的开头,你想,如果num-1都存在,那么你以num为头去找一个数字连续序列,那肯定不会是最长的。首先,数组中是有可能出现重复的数字,但是重复的数字其实并不影响我们找数字连续的最长序列,因为再多相同的也只能算一个长度,所以,我们可以先对数组进行一个?

blue的博客 648

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

力扣题解系列:128. 最长连续序列

题目:128. 最长连续序列 题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 解题思路: 对于在数组中的元素i,若i-1或者i+1也在数组中,则它们在一个连续序列中。但是同时考虑i-1和i+1就比较麻烦,而且在数组中查找元素的时间复杂度为O(n),不满足题目要求。于是可以只考虑i+1,这样做的前提条件是找到每个连

qq_38813052的博客 464

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode 128.最长连续序列

对于每个元素,最多只会被访问两次,一次作为序列的起点(即内层循环),一次作为序列的一部分(即外层循环),因此时间复杂度为。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]输入:nums = [100,4,200,1,3,2]显然,不能对数组进行排序,因为排序的时间复杂度是。输入:nums = [1,0,1,2]请你设计并实现时间复杂度为。

qq_73593013的博客 942

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

golang力扣leetcode 128. 最长连续序列

128. 最长连续序列128. 最长连续序列题解代码 128. 最长连续序列 128. 最长连续序列 题解 题目要求在一个数组中找出一个数字最长连续序列,还要是On的复杂度 首先把所有数字存在map里面,然后遍历map,此时要对current进行判断,如果hashmap[current-1]存在,那就跳过这次循环,因为我们要去找最小的一个数,如果不存在,这么那个数字必定是某个连续序列中首位数字,这个时候去计数hashmap[current+1]有几个,即可。外层循环需要 O(n)的时间复杂度,只有当一个数是

清风 915

128. 最长连续序列 - 力扣(LeetCode)

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9输入:nums = [1,0,1,2]输出:3。

Dubhehug的博客 317

LeetCode 128最长连续序列

LeetCode 128最长连续序列Hard 题目简述:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。 输入:[100, 4, 200, 1, 3, 2] 输出:4 解释:最长连续序列是 [1, 2, 3, 4] 思路:双指针算法 首先对未排序的数组进行排序,并将双指针都指向开始位置 只要r指向的数字等于r-1指向的数字或者比r-1指向的数字大1,那么r指针就向右移动扩大窗口,在移动过程中,当r指向的数字等于r-1指向的数字时,长度不变;当r指向的数字大r-1

XBlog 234

【算法入门】力扣题128:最长连续序列的Java与JavaScript解法|LeetCode 128. 最长连续序列:Java与JavaScript哈希集解法详解|新手必学算法技巧|

通过本文,我们学习了如何使用Java和JavaScript解决最长连续序列问题。这两种语言都提供了简单而有效的方法来处理这类问题,通过使用Set来优化查找效率。希望这篇文章能帮助你更好地理解并掌握这一知识点。好的,我很乐意为你提供详细的解答和博客内容。以下是一篇新手入门博客,包含Java和JavaScript的解答以及相关知识点的详细介绍。博客标题: 从零开始学习力扣题 128. 最长连续序列目录:问题描述Java解答2.1 暴力解法2.2 哈希表解法JavaScript解答。

南北极之间 1187

力扣LeetCode Hot100:Problem128:最长连续序列(三种方法,清晰易懂)

本文讨论了LeetCode 128题"最长连续序列"的三种解法。解法一使用排序加双指针(O(nlogn)),但需处理重复元素问题;解法二通过set去重并排序后使用双指针(O(nlogn));解法三利用哈希表(unordered_set)实现O(n)时间复杂度,通过判断序列起点并扩展序列长度。三种方法都能通过测试,但解法三最优,符合题目要求的线性时间复杂度。文章包含详细代码实现和复杂度分析,适合算法学习者参考。

通过输出内容提升自己 899

LeetCode 128. 最长连续序列

LeetCode 128. 最长连续序列

梦~' 1054

力扣热门算法题 127.单词接龙,128.最长连续序列,130.被围绕的区域

​力扣热门算法题 127.单词接龙,128.最长连续序列,130.被围绕的区域,每题做详细思路梳理,配套Python&Java双语代码, 2025.07.07 可通过leetcode所有测试用例。 ​

引用原创内容标明出处即可 1452

力扣 128. 最长连续序列(困难难度)

力扣 128. 最长连续序列(困难难度) 题目:给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200,1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 思路:将数组放入Hash表中,然后通过contains的方法对数字的连续性进行验证。这里为了使时间复杂度减小,我们这里只要对连续数列的第一个进行操作。 代码如下 class Solution { public int longe

weixin_43838406的博客 234

[LeetCode] 128、最长连续序列

因为规定了时间复杂度,先排序不满足要求。注:本题的标签之前没有哈希表,但是用。给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。)可满足要求,用并查集稍复杂。暴力,哈希表,并查集都可以。

aift的专栏 413

LeetCode 128. 最长连续序列 golang

128. 最长连续序列 【困难】 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 Code // 解题思路 // 将所有nums中元素录入numMap // 对每个numMap中元素,检测是否是第一个起始元素,如果不是起始元素,skip;如果是,对该元素循环+1从numMap找到该元素对应的最长currentLength

csdn_kou的博客 603
上一篇: Leetcode 239 滑动窗口最大值
下一篇: Leetcode 73 矩阵置零
耐利
博客等级 码龄12年 188粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值