哈希算法题目:数组的度
字数 1020 2025-10-29 11:31:55

哈希算法题目:数组的度

题目描述
给定一个非空且只包含非负数的整数数组 nums,数组的“度”定义为数组中任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,并返回其长度。

示例:

  • 输入:nums = [1,2,2,3,1]
    输出:2
    解释:数组的度是 2(元素 1 和 2 均出现 2 次)。最短子数组需包含所有频数等于度的元素,例如 [2,2][1,2,2,1],但最短的是 [2,2](长度为 2)。
  • 输入:nums = [1,2,2,3,1,4,2]
    输出:6
    解释:度的值为 3(元素 2 出现 3 次),最短子数组需包含所有 2 的出现位置,即 [2,2,3,1,4,2](长度为 6)。

解题过程

步骤 1:理解问题核心

  • 需要先确定数组的“度”,即最高频数。
  • 多个元素可能达到最高频数,需对所有这类元素分别计算其首次和末次出现的位置,以确定包含该元素所有出现的最短子数组长度。
  • 最终答案为所有这类子数组长度的最小值。

步骤 2:记录每个元素的关键信息
使用哈希表存储每个元素的以下信息:

  • count:出现次数。
  • first:首次出现的索引。
  • last:末次出现的索引。

遍历数组时:

  • 若元素首次出现,记录其索引为 first
  • 每次遇到该元素时更新 countlast 索引。

步骤 3:计算最高频数与最短子数组

  • 遍历哈希表,找到最大频数(度)。
  • 对所有频数等于度的元素,计算 last - first + 1 得到子数组长度。
  • 取所有此类长度的最小值。

步骤 4:示例推导
nums = [1,2,2,3,1,4,2] 为例:

  1. 构建哈希表:

    • 元素 1: count=2, first=0, last=4
    • 元素 2: count=3, first=1, last=6
    • 元素 3: count=1, first=3, last=3
    • 元素 4: count=1, first=5, last=5
  2. 最高频数(度)为 3(元素 2)。

  3. 对元素 2:子数组长度 = 6 - 1 + 1 = 6。

  4. 无其他元素频数为 3,故答案为 6。


关键点总结

  • 通过哈希表一次遍历记录每个元素的频数及首末位置。
  • 子数组必须包含所有频数等于度的元素,因此需覆盖该元素的全部出现位置。
  • 时间复杂度 O(n),空间复杂度 O(n)。
哈希算法题目:数组的度 题目描述 给定一个非空且只包含非负数的整数数组 nums ,数组的“度”定义为数组中任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,并返回其长度。 示例: 输入: nums = [1,2,2,3,1] 输出: 2 解释:数组的度是 2(元素 1 和 2 均出现 2 次)。最短子数组需包含所有频数等于度的元素,例如 [2,2] 或 [1,2,2,1] ,但最短的是 [2,2] (长度为 2)。 输入: nums = [1,2,2,3,1,4,2] 输出: 6 解释:度的值为 3(元素 2 出现 3 次),最短子数组需包含所有 2 的出现位置,即 [2,2,3,1,4,2] (长度为 6)。 解题过程 步骤 1:理解问题核心 需要先确定数组的“度”,即最高频数。 多个元素可能达到最高频数,需对所有这类元素分别计算其首次和末次出现的位置,以确定包含该元素所有出现的最短子数组长度。 最终答案为所有这类子数组长度的最小值。 步骤 2:记录每个元素的关键信息 使用哈希表存储每个元素的以下信息: count :出现次数。 first :首次出现的索引。 last :末次出现的索引。 遍历数组时: 若元素首次出现,记录其索引为 first 。 每次遇到该元素时更新 count 和 last 索引。 步骤 3:计算最高频数与最短子数组 遍历哈希表,找到最大频数(度)。 对所有频数等于度的元素,计算 last - first + 1 得到子数组长度。 取所有此类长度的最小值。 步骤 4:示例推导 以 nums = [1,2,2,3,1,4,2] 为例: 构建哈希表: 元素 1: count=2, first=0, last=4 元素 2: count=3, first=1, last=6 元素 3: count=1, first=3, last=3 元素 4: count=1, first=5, last=5 最高频数(度)为 3(元素 2)。 对元素 2:子数组长度 = 6 - 1 + 1 = 6。 无其他元素频数为 3,故答案为 6。 关键点总结 通过哈希表一次遍历记录每个元素的频数及首末位置。 子数组必须包含所有频数等于度的元素,因此需覆盖该元素的全部出现位置。 时间复杂度 O(n),空间复杂度 O(n)。