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

【哈希】Leetcode 128. 最长连续序列 【中等】

最长连续序列

  • 给定一个未排序的整数数组 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

解题思路

  1. 首先,将数组中的所有元素存入一个集合(HashSet)中,方便进行快速查找。
  2. 然后,遍历数组中的每个元素,对于每个元素,检查其是否是一个序列的起始点,即判断其前一个数是否在集合中存在。
  3. 如果是起始点,则从该点开始向后查找连续序列的长度,直到找到序列的末尾。
  4. 更新最长连续序列的长度,并在遍历完成后返回结果。

具体步骤

  1. 将数组中的所有元素存入一个集合(HashSet)中。
  2. 遍历数组中的每个元素,对于每个元素执行以下步骤:
    • 判断当前元素是否是一个序列的起始点,即判断其前一个数是否在集合中存在。
    • 如果是起始点,则从该点开始向后查找连续序列的长度,直到找到序列的末尾。
    • 更新最长连续序列的长度。
  3. 返回最长连续序列的长度。

java实现

public class LongestConsecutiveSequence {public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) {return 0;}// 将数组元素放入 HashSet 中,以便快速查找HashSet<Integer> numSet = new HashSet<>();for (int num : nums) {numSet.add(num);}int longestStreak = 0;// 遍历数组元素for (int num : nums) {// 如果当前元素是一个序列的起点,即前一个数字不存在于 HashSet 中if (!numSet.contains(num - 1)) {int currentNum = num;int currentStreak = 1;// 继续查找连续的数字while (numSet.contains(currentNum + 1)) {currentNum++;currentStreak++;}// 更新最长序列的长度longestStreak = Math.max(longestStreak, currentStreak);}}return longestStreak;}public static void main(String[] args) {LongestConsecutiveSequence solution = new LongestConsecutiveSequence();int[] nums1 = {100, 4, 200, 1, 3, 2};System.out.println(solution.longestConsecutive(nums1)); // 输出:4int[] nums2 = {0, 3, 7, 2, 5, 8, 4, 6, 0, 1};System.out.println(solution.longestConsecutive(nums2)); // 输出:9}
}
http://www.lryc.cn/news/312062.html

相关文章:

  • 回溯是怎么回事(算法村第十八关青铜挑战)
  • 向爬虫而生---Redis 探究篇5<Redis集群刨根问底(1)>
  • 系统集成Prometheus+Grafana
  • 实例驱动计算机网络
  • Unity 报错:SSL CA certificate error
  • 算法刷题Day1 | 704.二分查找、27.移除元素
  • 大数据技术学习笔记(五)—— MapReduce(2)
  • 北斗导航 | 同步双星故障的BDS/GPS接收机自主完好性监测算法
  • 2024金三银四必看前端面试题!简答版精品!
  • Python-sklearn.datasets-make_blobs
  • [最佳实践] conda环境内安装cuda 和 Mamba的安装
  • 【算法】顺时针打印矩阵(图文详解,代码详细注释
  • 蚂蚁感冒c++
  • python Plotly可视化
  • 刷题第10天
  • Bililive-go 实现直播自动监控录制
  • 【Redis】Redis持久化模式RDB
  • Java基础 - 模拟医院挂号系统
  • 【论文精读】基于知识图谱关系路径的多跳智能问答模型研究
  • uni app 微信小程序微信支付
  • Dgraph 入门教程一《 概览》
  • VSCode安装
  • STM32各外设初始化步骤
  • 10. Nginx进阶-Return
  • Nircmd集成定时执行专家之后的使用场景
  • Java面试题【必知必会】Linux常用命令面试题(2024)
  • 元宇宙融合多功能气膜馆:开启娱乐与文化的数字新纪元
  • 微信小程序本地开发
  • 2024火爆全网系列,原来RocketMQ中间件可以这么玩
  • 2024阿里、网易、京东等大厂最新Java面试题,一举拿下腾讯美团滴滴offer