步骤
先遍历一遍 统计所有元素的位置 把每个元素的位置计入到一个list里
再找到这些list中最长的 即为出现次数最多的数字
对于所有出现次数最多的数字
看谁的尾元素-首元素最小
即返回尾元素 - 首元素 + 1
class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
locdict = {}
sizedict = {}
length = len(nums)
for i in range(length):
val = nums[i]
if val not in locdict:
locdict[val] = [i]
sizedict[val] = 1
else:
locdict[val].append(i)
sizedict[val] += 1
maxlength = 0
todolist = []
for val in sizedict:
if sizedict[val] > maxlength:
todolist = [val]
maxlength = sizedict[val]
elif sizedict[val] == maxlength:
todolist.append(val)
else:
continue
minlength = 50000#题目条件给定,最长不超过50000
for val in todolist:
templength = locdict[val][-1] - locdict[val][0]
minlength = min(minlength,templength)
return minlength + 1