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

哈希:最长连续序列

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

输入: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.dtcms.com/a/342814.html

相关文章:

  • 如何根据团队技术能力选择最适合的PHP框架?
  • Python 标准库--python012
  • 机器学习集成算法与K-means聚类
  • Spring两个核心IoCDI(二)
  • 【信创系统】信创系统传输文件
  • 科普:Python 中颜色的格式: RGB 格式 v.s. RGBA 格式
  • Terraform vs Ansible:基础设施即代码(IaC)工具深度对比与实战指南
  • 哈尔滨服务器托管,如何实现高效稳定运行?
  • 泛型与反射
  • MySQL--MVCC
  • MPS MPQ2013AGQ-AEC1-Z MPS芯源汽车级 同步降压转换器IC 电源传感器IC
  • 【密码学】深入浅出栅栏密码:原理、流程与实现
  • Android:compose-Scaffold组件
  • 【CS创世SD NAND征文】存储芯片在工业电表中的应用与技术演进
  • 基于Python与Tkinter开发的微博多功能自动化助手
  • 构建包含IK插件(中文分词插件)的Elasticsearch镜像
  • 分治思想在系统分流削峰中的实践与Golang前沿实现
  • RK3568项目(十六)--linux驱动开发之块设备介绍
  • C++ 序列式容器深度解析:vector、string、deque 与 list
  • 虚幻基础:曲线
  • Go 并发编程-channel
  • Java的反射与枚举
  • 贪吃蛇游戏(纯HTML)
  • 服务发现与负载均衡:Kubernetes Service核心机制深度解析
  • Vue数据的变更操作与表单数据的收集【6】
  • 动漫短剧小程序系统开发|动漫短剧小程序搭建|动漫短剧源码交付
  • 后浪来袭:NIST 轻量级密码标准化决赛圈算法剖析(ASCON、SPARKLE 等)
  • AI翻唱实战:用[灵龙AI API]玩转AI翻唱 – 第6篇
  • RocketMQ 消息消费 单个消费和批量消费配置实现对比(Springboot),完整实现示例对比
  • TCP连接