

可以使用哈希表来记录每个元素的出现次数(频率),以及首次出现和最后一次出现的位置,然后计算满足度的最短子数组长度。
思路:
-
遍历数组,使用哈希表记录每个数的出现次数、第一次出现的索引和最后一次出现的索引。
-
找到出现次数最多的元素的度。
-
遍历所有具有该度的元素,计算它们的最短子数组长度(即
最后一次出现索引 - 第一次出现索引 + 1)。 -
返回最短的长度。
代码:
from collections import defaultdict
def findShortestSubarray(nums):
count = defaultdict(int) # 记录每个元素出现的次数
first = {} # 记录每个元素第一次出现的索引
last = {} # 记录每个元素最后一次出现的索引
for i, num in enumerate(nums):
count[num] += 1
if num not in first:
first[num] = i # 只记录第一次出现的索引
last[num] = i # 记录最后一次出现的索引
degree = max(count.values()) # 获取数组的度
min_length = float('inf')
for num in count:
if count[num] == degree:
min_length = min(min_length, last[num] - first[num] + 1)
return min_length
示例:
nums = [1, 2, 2, 3, 1, 4, 2]
print(findShortestSubarray(nums)) # 输出 6
复杂度分析:
-
时间复杂度:O(n),只需要一次遍历统计数据,第二次遍历寻找最小长度。
-
空间复杂度:O(n),用于存储元素的计数、索引等信息。
这个方法能够高效找到与数组相同度的最短子数组长度。🚀

被折叠的 条评论
为什么被折叠?



