一种很菜的做法(暴力),for循环(样例能过一大半呢,复杂度的话。。。)
class Solution:def findShortestSubArray(self, nums: List[int]) -> int:n=len(nums)if n==1:return nmx=1#出现次数最多的计算for i in range(n):start=nums[i]num=0for j in range(n):if nums[j]==start:num+=1if num>mx:mx=nummn=50001for i in range(n):set=1star=nums[i]for j in range(i+1,n):if nums[j]==star:set+=1if set==mx:if mn>(j-i):mn=j-ireturn (mn+1)
优化的话无非就是把两层for循环弄掉,改了一下发现不仅要找值,还要记录对应的下标,嗯。
这个时候我们需要用到字典
mp=dict()
mp['key1']='value1'
mp['key2']='value2'
正解:
class Solution:def findShortestSubArray(self, nums: List[int]) -> int:n=len(nums)#创建字典mp=dict()#字典中的3个值代表出现次数,首次出现位置,最后一次出现的位置for i,num in enumerate(nums):if num in mp:mp[num][0]+=1mp[num][2]=ielse:mp[num]=[1,i,i]mx=mn=0for count,left,right in mp.values():if mx<count:mx=countmn=right-left+1elif mx==count:#这个:=能够使得赋值语句正确出现在判断语句中if mn>(span :=right-left+1):mn=spanreturn mn
tql