哈希算法题目:最长连续序列
字数 921 2025-10-25 18:32:29

哈希算法题目:最长连续序列

题目描述:
给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

解题过程:

  1. 问题理解
    我们需要找到最长的连续整数序列。例如,数组 [100, 4, 200, 1, 3, 2] 中最长连续序列是 [1, 2, 3, 4],长度为 4。注意序列中的数字在原始数组中不一定相邻。

  2. 关键思路
    最直接的思路是对数组排序,然后遍历查找连续序列。但排序需要 O(n log n) 时间,不满足 O(n) 要求。我们可以用哈希集合(HashSet)来优化:

    • 先将所有数字存入哈希集合,实现 O(1) 的查找
    • 对于每个数字,如果它的前一个数(num-1)不在集合中,说明它是一个连续序列的起点
    • 从起点开始逐个检查后续数字(num+1, num+2...)是否在集合中,统计序列长度
  3. 逐步求解
    步骤 1:构建哈希集合

    • 遍历数组,将所有数字加入哈希集合(自动去重)
    • 示例 [100, 4, 200, 1, 3, 2] 的集合为 {100, 4, 200, 1, 3, 2}

    步骤 2:寻找序列起点并扩展

    • 遍历集合中的每个数字 num
    • 如果 num-1 不在集合中,说明 num 是一个序列的起点
      • 从 num 开始,依次检查 num+1, num+2... 是否在集合中
      • 统计连续存在的数字个数,即为当前序列长度
    • 更新最大长度

    示例详细过程:

    • 数字 100:99 不在集合中,是起点。检查 101 不在集合,序列长度 1
    • 数字 4:3 在集合中,不是起点,跳过
    • 数字 200:199 不在集合中,是起点。检查 201 不在,序列长度 1
    • 数字 1:0 不在集合中,是起点。检查 2 在集合,3 在集合,4 在集合,5 不在集合,序列长度 4
    • 数字 3:2 在集合中,跳过
    • 数字 2:1 在集合中,跳过
    • 最长序列长度为 4
  4. 复杂度分析

    • 时间复杂度:O(n)。每个数字最多被访问两次(一次在遍历集合,一次在序列扩展)
    • 空间复杂度:O(n)。哈希集合存储所有数字

这个算法通过哈希集合快速查找,避免了排序,实现了线性时间复杂度。

哈希算法题目:最长连续序列 题目描述: 给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题过程: 问题理解 我们需要找到最长的连续整数序列。例如,数组 [ 100, 4, 200, 1, 3, 2] 中最长连续序列是 [ 1, 2, 3, 4 ],长度为 4。注意序列中的数字在原始数组中不一定相邻。 关键思路 最直接的思路是对数组排序,然后遍历查找连续序列。但排序需要 O(n log n) 时间,不满足 O(n) 要求。我们可以用哈希集合(HashSet)来优化: 先将所有数字存入哈希集合,实现 O(1) 的查找 对于每个数字,如果它的前一个数(num-1)不在集合中,说明它是一个连续序列的起点 从起点开始逐个检查后续数字(num+1, num+2...)是否在集合中,统计序列长度 逐步求解 步骤 1:构建哈希集合 遍历数组,将所有数字加入哈希集合(自动去重) 示例 [ 100, 4, 200, 1, 3, 2 ] 的集合为 {100, 4, 200, 1, 3, 2} 步骤 2:寻找序列起点并扩展 遍历集合中的每个数字 num 如果 num-1 不在集合中,说明 num 是一个序列的起点 从 num 开始,依次检查 num+1, num+2... 是否在集合中 统计连续存在的数字个数,即为当前序列长度 更新最大长度 示例详细过程: 数字 100:99 不在集合中,是起点。检查 101 不在集合,序列长度 1 数字 4:3 在集合中,不是起点,跳过 数字 200:199 不在集合中,是起点。检查 201 不在,序列长度 1 数字 1:0 不在集合中,是起点。检查 2 在集合,3 在集合,4 在集合,5 不在集合,序列长度 4 数字 3:2 在集合中,跳过 数字 2:1 在集合中,跳过 最长序列长度为 4 复杂度分析 时间复杂度:O(n)。每个数字最多被访问两次(一次在遍历集合,一次在序列扩展) 空间复杂度:O(n)。哈希集合存储所有数字 这个算法通过哈希集合快速查找,避免了排序,实现了线性时间复杂度。