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

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;}
}

相关文章:

  • 代码随想录算法训练营第60期第五十九天打卡
  • Python训练第四十六天
  • AcWing 3417:砝码称重——位集合
  • Unity版本使用情况统计(更新至2025年5月)
  • JavaSec-SPEL - 表达式注入
  • 应用宝和苹果App Store上架条件、审核规则及操作流程文档
  • NLP学习路线图(二十七):Transformer编码器/解码器
  • 如何让AI自己检查全文?使用OCR和LLM实现自动“全文校订”(可DIY校订规则)
  • 获1.3亿美元融资,NewLimit利用机器学习指导表观遗传程序设计,延长人类健康寿命研究已有初级成果
  • 程序代码篇---智能家居传感器
  • scss(sass)中 的使用说明
  • 并查集专题
  • Python|GIF 解析与构建(5):手搓截屏和帧率控制
  • 思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
  • 华为仓颉语言初识:并发编程之同步机制(上)
  • 当丰收季遇上超导磁测量:粮食产业的科技新征程
  • Redis 主从 + 哨兵集群部署
  • 智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
  • Redis配合唯一序列号实现接口幂等性方案
  • App/uni-app 离线本地存储方案有哪些?最推荐的是哪种方案?
  • 网站建设准备工作/seo需要什么技术
  • 福州建网站/公司网站模版
  • 益阳营销型网站建设/百度推广关键词排名规则
  • 做微电网的公司网站/seo短视频入口引流
  • 乐清网站建设服务/游戏推广渠道有哪些
  • 本地电脑做网站服务器/百度快照什么意思