news 2026/9/21 17:51:39

hot100 128.最长连续序列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 128.最长连续序列

思路:

1.题目要求时间复杂度为O(n),而排序的时间复杂度是O(nlogn),因此本题不能排序。

2.核心思路:对于nums中的元素x,以x为起点,不断查找下一个数x + 1,x + 2,...是否在nums中,并统计序列的长度。

3.为了做到O(n)的时间复杂度,需要做到两个关键优化。

(1)把nums中的数都放到一个哈希集合中,这样可以以O(1)的时间复杂度判断数字是否在nums中。

(2)如果x - 1在哈希集合中,则不以x为起点。这是因为以x - 1为起点计算出的序列长度,一定要比以x为起点计算出的序列长度要长,这样可以避免大量重复计算。比如nums == [3,2,4,5],从3开始,可以找到3,4,5这个连续序列;而从2开始,则可以找到2,3,4,5这个连续序列,一定比从3开始找到的连续序列要长。

4.注意:遍历元素的时候,要遍历哈希集合,而不是nums。如果nums =[1,1,1,...,1,2,3,4,5,...](前一半都是1),遍历nums的做法会导致每个1都跑一个O(n)的循环,总的循环次数是O(n^2),会超时。

附代码:

class Solution { public int longestConsecutive(int[] nums) { Set<Integer> set = new HashSet<>(); for(int num : nums){ set.add(num); //把nums转换成哈希集合 } int ans = 0; for(int x : set){ //遍历哈希集合 if(set.contains(x - 1)){ //如果x不是序列的起点,则直接跳过 continue; } //x是序列的起点 int y = x + 1; while(set.contains(y)){ //不断查找下一个数是否在哈希集合中 y++; } // 循环结束后,y - 1就是最后一个在哈希集合中的数 // 长度为 y - 1 - x + 1 = y - x ans = Math.max(ans,y - x); } return ans; } }

小优化:设m为nums中不同元素的个数(即哈希集合的大小)。各个连续序列(链)是相互独立的,如果发现其中一条链的长度至少为m/2(长度×2>=m),由于不可能还有一条长度大于m/2的链(否则这两条链的长度之和就超过m了),答案不会再增大,此时可以直接返回答案。

class Solution { public int longestConsecutive(int[] nums) { Set<Integer> set = new HashSet<>(); for(int num : nums){ set.add(num); //把nums转换成哈希集合 } int m = set.size(); int ans = 0; for(int x : set){ //遍历哈希集合 if(set.contains(x - 1)){ //如果x不是序列的起点,则直接跳过 continue; } //x是序列的起点 int y = x + 1; while(set.contains(y)){ //不断查找下一个数是否在哈希集合中 y++; } // 循环结束后,y - 1就是最后一个在哈希集合中的数 // 长度为 y - 1 - x + 1 = y - x ans = Math.max(ans,y - x); if(ans * 2 >= m){ break; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 23:03:58

拼接符“II”在Oracle和HGDB中使用的差异

文章目录环境症状问题原因解决方案环境 系统平台&#xff1a;Microsoft Windows (64-bit) 10 版本&#xff1a;5.6.4 症状 如下情况所示&#xff1a;在Oracle中和HGDB中使用拼接符“||”结果不一致。 Oracle&#xff1a; SQL> select null||123 from dual ;NUL -------…

作者头像 李华
网站建设 2026/9/21 11:38:01

GNSS位移监测站:滑坡、地裂在线监测解决方案

一、核心技术篇&#xff1a;FT-WY1毫米级监测有多牛?差分 RTK 技术到底是什么?​提问&#xff1a;“差分 RTK 技术实现毫米级位移监测”&#xff0c;具体精度能达到多少?对工程安全来说意味着什么?​小助手支招&#xff1a;毫米级精准捕捉&#xff0c;隐患早发现早处置!差分…

作者头像 李华
网站建设 2026/9/21 22:17:31

LangFlow与Rust语言结合提升系统级AI性能

LangFlow与Rust语言结合提升系统级AI性能 在构建现代AI应用的浪潮中&#xff0c;一个日益突出的矛盾摆在开发者面前&#xff1a;上层业务逻辑需要快速迭代、灵活调整&#xff0c;而底层计算模块又必须稳定高效、经得起高并发考验。传统的全Python栈虽然开发便捷&#xff0c;但在…

作者头像 李华
网站建设 2026/9/21 6:52:08

无需编程!使用LangFlow实现LangChain流程自动化

无需编程&#xff01;使用LangFlow实现LangChain流程自动化 在大语言模型&#xff08;LLM&#xff09;迅速普及的今天&#xff0c;越来越多团队希望快速构建智能问答、客服助手或自动化报告系统。然而&#xff0c;即便有了像 LangChain 这样的强大框架&#xff0c;开发者仍需编…

作者头像 李华
网站建设 2026/9/21 11:26:39

基于Kotaemon的智能客服RAG解决方案

基于Kotaemon的智能客服RAG解决方案 在医疗、金融或高端制造这类知识密度极高的行业里&#xff0c;一个看似简单的客户提问——“上季度华东区的库存周转率是多少&#xff1f;”——背后往往牵扯出复杂的系统调用与数据溯源需求。通用大模型或许能流利作答&#xff0c;但若答案…

作者头像 李华