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

力扣100题之128. 最长连续序列

方法1 使用了hash

方法思路
使用哈希集合:首先将数组中的所有数字存入一个哈希集合中,这样可以在 O(1) 时间内检查某个数字是否存在。
寻找连续序列:遍历数组中的每一个数字,对于每一个数字,
检查它是否是某个连续序列的起点(即检查 num - 1 是否存在于集合中)。
如果不是起点,则跳过;
如果是起点,则开始向后检查连续的数字(num + 1, num + 2 等),并记录序列的长度。
更新最大长度:在遍历过程中,不断更新记录的最大序列长度。
这种方法确保每个数字最多被访问两次(一次在遍历数组时,一次在检查连续序列时),因此时间复杂度为 O(n)。

    public int longestConsecutive(int[] nums) {/*  方法思路使用哈希集合:首先将数组中的所有数字存入一个哈希集合中,这样可以在 O(1) 时间内检查某个数字是否存在。寻找连续序列:遍历数组中的每一个数字,对于每一个数字,检查它是否是某个连续序列的起点(即检查 num - 1 是否存在于集合中)。如果不是起点,则跳过;如果是起点,则开始向后检查连续的数字(num + 1, num + 2 等),并记录序列的长度。更新最大长度:在遍历过程中,不断更新记录的最大序列长度。这种方法确保每个数字最多被访问两次(一次在遍历数组时,一次在检查连续序列时),因此时间复杂度为 O(n)。*///        1.哈希集合初始化:将数组中的所有数字存入哈希集合 numSet 中,以便快速查找。Set<Integer> hashSet = new HashSet<>;for(int num:nums){hashSet.add(num);}int longesetStreak = 0;
//        2.遍历集合:对于集合中的每一个数字,检查它是否是某个连续序列的起点(即 num - 1 不在集合中)。for(int num:hashSet){//        3.扩展序列:如果是起点,则向后扩展序列,计算当前连续序列的长度 currentStreak。if(!hashSet.contains(num-1)){int currentNum =num;int currentStreak=1;while(hashSet.contains(currentNum+1)){currentNum++;currentStreak++;}//        4.更新最大值:比较并更新最长序列长度 longestStreak。longesetStreak=Math.max(longesetStreak,currentStreak);}}//        5.返回结果:最终返回最长序列的长度。return longesetStreak;}

方法二 排序法(时间复杂度大)

public int longestConsecutive(int[] nums) {// 处理边界情况:空数组直接返回0if (nums.length == 0) return 0;// 对数组排序(升序),便于后续连续元素判断Arrays.sort(nums);int maxLength = 0;  // 记录最长连续子序列长度int currentLength = 1;  // 当前连续子序列长度,初始为1(至少有一个元素)// 从第二个元素开始遍历(索引1到末尾)for (int i = 1; i < nums.length; i++) {int currentNum = nums[i];int prevNum = nums[i - 1];if (currentNum == prevNum) {// 跳过重复元素(排序后相邻重复,不影响连续性判断)continue;} else if (currentNum == prevNum + 1) {// 当前元素与前一个元素连续,长度加1currentLength++;} else {// 连续序列中断,更新最长长度,并重置当前长度maxLength = Math.max(maxLength, currentLength);currentLength = 1;}}// 处理最后一次连续序列(遍历结束后可能还有未比较的长度)return Math.max(maxLength, currentLength);
}

在这里插入图片描述

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

相关文章:

  • 探秘 MyBatis:开启你的数据库操作「智能之旅」
  • 基于Qt的app开发第十三天
  • 【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
  • 服务器中CC攻击的特点有哪些?
  • 全面解析网络端口:概念、分类与安全应用
  • Windows 10 IoT 系统深度定制指南:从环境搭建到工业部署
  • 暴雨新专利解决服务器噪音与性能悖论
  • 【JavaScript-Day 32】深入理解 prototype、\_\_proto\_\_ 与原型链的奥秘**
  • SpringBoot3整合MySQL8的注意事项
  • 告别局域网:实现NASCab云可云远程自由访问
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的生态农庄留存运营策略研究
  • element-plus 单选组件 el-radio,选不上,又没报错,直接复制官网也不行解决方案
  • Ruoyi多主键表的增删改查
  • LeetCode 热题 100 - 哈希 - 128
  • 解决神经网络输出尺寸过小的实战方案
  • React从基础入门到高级实战:React 实战项目 - 项目二:电商平台前端
  • [pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)
  • OpenResty 安装指南
  • 【JS进阶】ES5 实现继承的几种方式
  • k8s开发webhook使用certmanager生成证书
  • 记一次spark在docker本地启动报错
  • PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
  • vllm安装注意事项[nccl、cuda、python相关]
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • spring官方脚手架连接不上解决方案
  • 语雀文档保存失败URI malformed
  • v1.0.1版本更新·2025年5月22日发布-优雅草星云物联网AI智控系统
  • YAML在自动化测试中的三大核心作用
  • SSL/TLS握手全流程拆解:从“Hello“到“安全通道“的每一个字节
  • 高性能分布式消息队列系统(四)