news 2026/7/10 13:22:36

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/7/10 11:34:45

实测3款论文降ai神器,手动+工具一键搞定降AIGC率!

最近毕业季&#xff0c;后台私信简直要炸了。很多同学都在哭诉&#xff1a;明明是自己一个字一个字码出来的论文&#xff0c;结果aigc降重检测结果竟然高达50%甚至70%以上。别慌&#xff0c;这其实是很多学生和研究者都会遇到的普遍问题。只要搞懂了原理&#xff0c;掌握正确的…

作者头像 李华
网站建设 2026/7/9 17:37:36

GNSS 形变监测系统:扼流圈 GNSS 监测站

提问&#xff1a;“北斗 GPS 双模定位 差分 RTK 技术”&#xff0c;具体精度能达到多少?对边坡、大坝监测来说意味着什么?​小助手支招&#xff1a;毫米级精准捕捉&#xff0c;隐患早发现早处置!系统通过北斗、GPS 多卫星系统融合定位&#xff0c;搭配差分 RTK 技术(基准站…

作者头像 李华
网站建设 2026/7/10 11:35:49

Java集合-Set讲解

目录一、集合框架层次结构二、Collection集合1、Set集合1、HashSet2、LinkedHashSet3、TreeSet4、ConcurrentSkipListSet5、CopyOnWriteArraySetJava 集合框架&#xff08;Collections Framework&#xff09;是 Java 中用于 存储和操作数据组的重要架构。它提供了一组接口、实现…

作者头像 李华
网站建设 2026/7/9 16:45:34

Qwen3-VL-30B-FP8:高效多模态模型新突破

Qwen3-VL-30B-FP8&#xff1a;高效多模态模型新突破 在视觉语言模型迈向“看得懂、想得深、用得动”的今天&#xff0c;如何在不牺牲性能的前提下大幅降低部署成本&#xff0c;成为工业界和学术界共同关注的焦点。通义千问团队最新发布的 Qwen3-VL-30B-FP8 正是这一挑战下的关键…

作者头像 李华
网站建设 2026/7/10 12:04:28

Kotaemon智能体框架支持C++和Go语言插件开发?技术细节揭秘

Kotaemon智能体框架支持C和Go语言插件开发&#xff1f;技术细节揭秘 在企业智能化转型加速的今天&#xff0c;构建一个既能理解复杂业务逻辑、又能稳定运行于高并发环境的对话系统&#xff0c;已成为AI工程落地的核心挑战。传统聊天机器人往往困于“问答即检索”的简单范式&am…

作者头像 李华
网站建设 2026/7/10 4:19:21

NPM安装Express中间件处理TensorRT请求队列

构建高性能AI服务&#xff1a;基于Express中间件与TensorRT的请求队列处理 在如今的AI应用开发中&#xff0c;一个常见的挑战是——如何让前端API稳定地对接高吞吐、低延迟的深度学习推理后端&#xff1f;尤其是在面对突发流量时&#xff0c;直接将客户端请求打到GPU服务上&…

作者头像 李华