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

LeetCode 128. 最长连续序列

128. 最长连续序列 - 力扣(LeetCode)

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

示例 3:

输入:nums = [1,0,1,2]
输出:3

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

解题思路:

对于 nums 中的元素 n,以 n 为起点,不断查找下一个数 n+1, n+2, ⋯ 是否在 nums 中,并统计序列的长度。

为了满足O(n)的时间复杂度, 

1. 把 nums 的元素放在 Set 中去重后, O(1) 复杂度判断 n + 1...是否在 nums 中;

2. 如果 n - 1 在 Set 集合中, 则不能以 n 为起点, 因为 n - 1 为起点的序列一定比 n 为起点的序列长。

class Solution {public int longestConsecutive(int[] nums) {// hash// Time: O(n)// Space: O(n)Set<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int longestStreak = 0;for (int num : set) {if (!set.contains(num - 1)) {int curNum = num;int curStreak = 1;while (set.contains(curNum + 1)) {curNum++;curStreak++;}longestStreak = Math.max(longestStreak, curStreak);}}return longestStreak;}
}

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

相关文章:

  • Flink checkpoint
  • MiniExcel模板填充Excel导出
  • AndroidR车机TextToSpeech音频焦点异常问题分析
  • 搭建前后端分离项目
  • 云服务器宕机或自动重启怎么办
  • DeepSeek提示词撰写心得
  • 什么是零拷贝?
  • ubuntu屏幕复制
  • 简易EPOLL模型
  • 【地址区间划分】
  • 009-libb64 迅速上手 libb64 -C++开源库108杰
  • jar包如何引入
  • 汇川变频器MD600S-4T-5R5为什么要搭配GRJ9000S-10-T滤波器?
  • 使用 CMAKE_DEBUG_TARGET_PROPERTIES调试目标属性
  • ml307 二次开发
  • 阶段技术问答题目
  • 执行什么命令可以让内存使用率达到80%
  • STM32寄存器访问位宽确实存在16位和32位的混合情况但地址上一定要4字节对齐
  • 智慧照明:集中控制器、单双灯控制器与智慧灯杆网关的高效协同
  • 轻松掌控硬件接口:LuatIO可视化工具,物联网开发的“效率加速器”!
  • PS如何傻瓜式扣图、图片编辑、图片合成
  • 2025.5.28【33OJ NOI 模拟赛 T3】字符串(AC自动机, 字符串后缀结构)
  • [蓝桥杯]耐摔指数
  • World of Warcraft [Vault of Archavon][Reins of the Grand Black War Mammoth]
  • 导航路径优化(一)——平滑
  • Docker MCP 目录和工具包简介:使用 MCP 为 AI 代理提供支持的简单安全方法
  • Java 中比较两个 long 类型变量大小的方法
  • 从Gartner报告看Atlassian在生成式AI领域的创新路径与实践价值
  • Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题
  • 电路设计基础-3