news 2026/4/23 18:35:00

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/4/22 13:06:51

Excalidraw使用技巧:从数据到图表的高效转化

Excalidraw使用技巧&#xff1a;从数据到图表的高效转化 在产品设计与技术协作中&#xff0c;最耗时的往往不是思考本身&#xff0c;而是把脑子里的想法“画出来”。你有没有过这样的经历&#xff1a;会议中刚理清一个系统流程&#xff0c;却因为要手动拖拽十几个方框、连线、…

作者头像 李华
网站建设 2026/4/23 8:17:24

FLUX.1-dev模型本地训练与推理指南(GPU/NPU)

FLUX.1-dev模型本地训练与推理指南&#xff08;GPU/NPU&#xff09; 模型简介 FLUX.1-dev 是由 Black Forest Labs 推出的下一代文生图多模态大模型&#xff0c;作为 Stable Diffusion 原班团队的新作&#xff0c;其在生成式人工智能领域树立了新的技术标杆。该模型基于创新的…

作者头像 李华
网站建设 2026/4/23 8:18:57

COBOL编程入门:从基础到文件处理

COBOL编程入门&#xff1a;从基础到文件处理 在银行核心系统的一次深夜故障排查中&#xff0c;运维团队发现一笔关键交易未能入账。经过层层追踪&#xff0c;问题最终指向一段运行了三十年的薪资计算逻辑——代码依然健壮&#xff0c;但能读懂它的人却越来越少。这正是COBOL的真…

作者头像 李华
网站建设 2026/4/23 11:20:03

Ubuntu部署Dify+蓝耘MaaS打造AI应用

在 Ubuntu 上快速构建 RAG 智能客服&#xff1a;Dify 蓝耘 MaaS 实战部署 如今&#xff0c;企业对 AI 的期待早已从“能不能用”转向“能不能落地”。一个典型场景是&#xff1a;客户在官网反复询问套餐价格、开通流程或技术支持方式——这些问题明明有标准答案&#xff0c;却…

作者头像 李华
网站建设 2026/4/23 11:20:59

Stable Diffusion 3.5本地部署与远程访问实战

Stable Diffusion 3.5本地部署与远程访问实战 在生成式AI飞速演进的今天&#xff0c;越来越多创作者和开发者不再满足于使用现成的在线服务。他们更希望拥有一套完全自主控制、可定制、高性能的本地AI绘图系统——既能保护数据隐私&#xff0c;又能摆脱高昂算力成本的束缚。 …

作者头像 李华
网站建设 2026/4/23 14:34:32

孢子捕捉仪孢子捕捉分析系统

孢子自动捕捉系统作为现代农业病害防控的核心装备&#xff0c;通过智能化监测与精准预警机制&#xff0c;为作物健康管理提供科学支撑。该系统集成多项关键技术模块&#xff0c;实现从孢子捕获到数据分析的全流程自动化管理。设备核心驱动单元采用横向与纵向双轴电机协同工作机…

作者头像 李华