我们利用哈希表来解决该问题,我们通过字典记录出现的次数和位置,进行排序,然后我们寻找第一个和最后一个位置差,就可以找到答案了
# 找到所有元素的索引
n = len(nums)
d = collections.defaultdict(list)
for i in range(n):
d[nums[i]].append(i)
# 按照出现次数排序
tmp = sorted(d, key=lambda x: len(d[x]), reverse=True)
# 确定数组的度
degree = len(d[tmp[0]])
# 找到最短子数组长度
res = 50000
for index in tmp:
if len(d[index]) == degree:
res = min(res, d[index][-1] - d[index][0] + 1)
else:
break
return res