Leecode-697-数组的度
题目描述
给定一个非空且只包含非负数的整数数组
nums
,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在
nums
中找到与nums
拥有相同大小的度的最短连续子数组,返回其长度。
1 | 示例 1: |
思路:哈希表+贪心
- 记原数组中出现次数最多的数为 x,那么和原数组的度相同的最短连续子数组,必然包含了原数组中的全部 x,且两端恰为 x 第一次出现和最后一次出现的位置。
- 因为符合条件的 x可能有多个,即多个不同的数在原数组中出现次数相同。所以为了找到这个子数组,我们需要统计每一个数出现的次数,同时还需要统计每一个数第一次出现和最后一次出现的位置。
- 使用哈希表实现该功能,每一个数映射到一个长度为 3 的数组,
- 数组中的三个元素分别代表这个数出现的次数、这个数在原数组中第一次出现的位置和这个数在原数组中最后一次出现的位置。
- 当我们记录完所有信息后,我们需要遍历该哈希表,找到元素出现次数最多,且前后位置差最小的数。
1 | class Solution { |
复杂度分析
时间复杂度:O(n),其中 n 是原数组的长度,我们需要遍历原数组和哈希表各一次,它们的大小均为 O(n)。
空间复杂度:O(n),其中 n 是原数组的长度,最坏情况下,哈希表和原数组等大。
打赏