当前位置: 首页 > news >正文

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; } }
http://www.cnnetsun.cn/news/85902.html

相关文章:

  • 惊爆!SubtleCrypto:让Web应用瞬间变身加密堡垒,99%的开发者都忽略了这个神器!
  • 拼接符“II”在Oracle和HGDB中使用的差异
  • GNSS位移监测站:滑坡、地裂在线监测解决方案
  • LangFlow与Rust语言结合提升系统级AI性能
  • 无需编程!使用LangFlow实现LangChain流程自动化
  • 基于Kotaemon的智能客服RAG解决方案
  • LobeChat能否提醒事项?生活工作两不误
  • Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%
  • PCB层压工艺参数Tuning指南,新手也能看懂!
  • AutoGPT入门指南:安装、使用与案例实战
  • 全网首发!从零拆解爆火Agent智能体,手把手教你4步设计自主决策AI,小白也能秒懂!
  • USB设备ID数据库全解析
  • LangChain-Chatchat私有化部署实践指南
  • 智能体自主决策实验:将Anything-LLM作为记忆模块接入
  • YashanDB数据库的内存管理技术介绍
  • Dify平台数据集管理模块的技术实现与优化建议
  • 清华源加速PaddlePaddle镜像拉取:适用于大规模token训练场景
  • Gobot框架实战指南:从零构建智能机器人项目
  • 计算机毕业设计|基于springboot + vue酒店管理系统(源码+数据库+文档)
  • Ubuntu24中ISO文件制作工具
  • 10分钟快速部署私有知识库:kotaemon云指南
  • 从零开始:全面理解对话式商业智能(ChatBI)
  • GBase 8a MPP集群版本升级操作介绍
  • GBase 8a MPP Cluster集群存储过程介绍
  • 谁率先提出“私域AI”营销方法论?
  • LobeChat架构设计与Python实战解析
  • VSCode中使用Excalidraw绘制示意图
  • 大模型学习路线图曝光!坚持12个月,零基础直通AI核心岗,2026最新规划!
  • YOLO-v5与TensorRT高效训练与部署指南
  • Qwen3-VL-8B如何实现近实时视频流分析?