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

哈希:最长连续序列

题目描述:无序的整型数组,求连续最长序列。

输入:nums = [100,4,200,1,3,2]

输出:4   (因为:最长数字连续序列是 [1, 2, 3, 4],长度为 4。)

说明:连续指的是数字的连续,算法要求时间复杂度为O(n)。


求解思路:遍历数组,依次往下找。在找的过程中,因为求最长,所以找的时候需要确定当前数是序列最小,否则没必要。用Set容器存储所有数作为辅助,方便确定我们找的连续序列中的数是否存在。(因为求解的最长序列,不要求在数组连续,所以想到用set去重也不会影响结果。)

class Solution {public int longestConsecutive(int[] nums) {int longest = 0;// 把所有数存在set中,方便查找HashSet<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}// 遍历,寻找最长连续序列for (int i = 0; i < nums.length; i++) {int curNum = nums[i];//判断前驱存不存在很重要!确保序列是从最小的curNum开始if (!set.contains(curNum - 1)) {// curNum是序列的开头,len为1int len = 1;// 寻找curNum的下个数。前置++,++curNum和curNum+1效果一样,但是++或者--一般用在遍历,curNum+1更方便理解while (set.contains(curNum + 1)) {len += 1;curNum += 1;}longest = Math.max(longest, len);}}return longest;}
}

以上代码,会报超时。

再次优化,遍历set代替遍历nums。

class Solution {public int longestConsecutive(int[] nums) {int longest = 0;// 把所有数存在set中,方便查找HashSet<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}// 遍历set,因为set中比原数组数少,不存在重复的for (Integer num : set) {// 之所以这里需要使用curNum把num记录下来,因为num是for循环进行的条件。和for(i...len)不同int curNum = num;if (!set.contains(curNum - 1)) {int len = 1;while (set.contains(curNum + 1)) {len += 1;curNum += 1;}longest = Math.max(longest, len);}}return longest;}
}

总结:判断cur-1是核心,确保序列开头最小。遍历set是其二,省去重复的计算。

联系地址:128. 最长连续序列 - 力扣(LeetCode)

http://www.xdnf.cn/news/18339.html

相关文章:

  • BGP高级特性
  • 通信工程学习:什么是Template Matching模版匹配
  • 利用 Java 爬虫获取淘宝商品评论实战指南
  • 谈谈架构的内容
  • Linux 802.11协议栈深度分析与实践指南
  • 如何在日常开发中高效使用 Copilot
  • 算法训练营day58 图论⑧ 拓扑排序精讲、dijkstra(朴素版)精讲
  • Wireshark数据包波形绘制异常
  • 【Docker】在Ubuntu22.04上安装Docker
  • 药品追溯码(溯源码)采集系统(二):门诊发药后端
  • ZeroNews构建企业级安全网络架构
  • C++高频知识点(三十四)
  • 【领码课堂】让Java数据检索更智能——Bean Searcher全景解读
  • 广东省省考备考(第八十三天8.21)——言语、判断推理(强化训练)
  • 【Protues仿真】基于AT89C52单片机的舵机和直流电机控制
  • 无人机高科技,翱翔未来新天地
  • 嵌入式接口通识知识之PWM接口
  • 算法题(187):程序自动分析
  • 告别服务器!Amazon Lambda无服务开发实战指南
  • 云原生俱乐部-k8s知识点归纳(6)
  • 多模态大模型研究每日简报【2025-08-21】
  • 【STM32入门教程】新建工程
  • 开源代码——gtsam_points配置安装
  • 机器学习经典算法总结:K-Means聚类与集成学习(Bagging, Boosting, Stacking)
  • 桌面挂件不能承受之重——GIF
  • 机器学习之数据预处理学习总结
  • MybatisPlusAutoConfiguration源码阅读
  • 强化学习算法分类与介绍(含权重更新公式)
  • 深度解析Atlassian 团队协作套件(Jira、Confluence、Loom、Rovo)如何赋能全球分布式团队协作
  • Windows查看端口占用情况