news 2026/4/16 13:59:39

A.每日一题——128. 最长连续序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
A.每日一题——128. 最长连续序列

题目链接:128. 最长连续序列(中等)

算法原理:

解法:哈希表

23ms击败91.35%

时间复杂度O(N)

题目要求时间复杂度是O(N),那么我们就不能直接调用Arrays.sort直接排序,因为这样的话时间复杂度会飙升到O(NlogN)

由于让求的是最长连续序列,重点在连续,意味着同样的数,只要出现一次就够用了,所以可以去重,省下大量的遍历

①把所有数全扔进Set容器里,这样可以用O(1)来判断这个数是否在nums中

②如果x-1在哈希集合中,那么就不能以x为起点了,因为以x-1为起点计算出的序列长度一定比以x为起点计算出的序列长度要长!所以直接跳过即可,可以避免大量的重复计算!

比如nums=[5,2,4,3],从3开始找到的序列是3,4,5,而从2开始找到的是2,3,4,5

③小优化:当以当前x为起点找到的序列长度超过原数组长度一半时,那么就无需再找了,因为没有序列能比这个还长了,直接返回结果即可

Java代码:

class Solution { public int longestConsecutive(int[] nums) { Set<Integer> hash=new HashSet<>(); //把nums里的元素全扔哈希表里 for(int x:nums) hash.add(x); int ret=0; for(int x:hash){ //如果x前面还有更小的,那么当前x一定不能作最长连续子序列的起点,直接跳过 if(hash.contains(x-1)) continue; //x是序列的起点 int y=x+1; while(hash.contains(y)) y++; //循环结束之后,y-1是最后一个在哈希集合的数 //从x到y-1一共y-x个数 ret=Math.max(ret,y-x); //小优化:当前连续子序列长度超过原数组的一半时 //不可能再有比这个长的了,直接返回 if(ret*2>=hash.size()) break; } return ret; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:41:08

BurpSuite 保姆级使用指南|纯干货分享

我的BurpSuite食用方法 | 干货 0x1 Burp安装与破解 访问官网直接下载Mac OS的安装版:https://portswigger.net/burp/releases&#xff0c;然后正常安装。 破解: git clone https://github.com/TrojanAZhen/BurpSuitePro-2.1.git在应用程序中找到burp&#xff0c;显示包内容…

作者头像 李华
网站建设 2026/4/12 3:19:33

血清/血浆蛋白质组学

血浆与血清作为最主要的临床样本&#xff0c;是评估人类健康和疾病状态的理想生物标本&#xff0c;方便采集。血浆中的蛋白质来源于身体各个组织和脏器&#xff0c;并通过血液循环流经全身&#xff0c;可动态反应各种疾病问题。血浆蛋白质参与生命体的生长、修复、信号传导、运…

作者头像 李华
网站建设 2026/4/16 11:13:32

GESP认证C++编程真题解析 | B4260 [GESP202503 二级] 时间跨越

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/4/16 10:39:57

全面解析iOS应用代码混淆和加密加固方法与实践注意事项

android 代码混淆注意点 ios代码混淆技术 为了给iOS app加固&#xff0c;我们可以采取以下几种方式&#xff1a; 1.代码混淆 代码混淆是通过修改源代码结构和变量名&#xff0c;使得代码难以被理解和反编译。这可以防止黑客获取应用程序的代码&#xff0c;因为即使他们能够获得…

作者头像 李华