HWA_09leetcode697数组的度
题目
题解
enumerate() 是Python内置函数,用于同时获取可迭代对象的索引和值
:=在python中的作用
classSolution:deffindShortestSubArray(self,nums:List[int])->int:#key为数组中的值#value为一个数组#数组的第一个元素为key出现的次数#数组的第二个元素为key第一次出现的位置#数组的第三个元素为key最后一次出现的位置mp=dict()#遍历数组,统计每个元素出现的次数、第⼀次出现的位置、最后⼀次出现的位置#把结果更新到mp当中fori,numinenumerate(nums):#如果哈希表 map 中已经存在当前这个元素的 key#说明在遇到 nums[i] 之前已经遇到了 nums[i] 这个值ifnuminmp:mp[num][0]+=1mp[num][2]=ielse:mp[num]=[1,i,i]#更新这个元素出现的次数为 1. 更新这个元素第⼀次出现的位置为 i. 更新这个元素最后⼀次出现的位置为 imaxNum=minLen=0#记录元素出现的最多次数#记录符合要求的元素并且前后位置差最⼩的数的⻓度#temp[0] 为 key 出现的次数#如果这个值⽐ maxNum 更⼤,那么数字需要更新forcount,left,rightinmp.values():ifmaxNum<count:maxNum=count#更新元素出现的最多次数minLen=right-left+1elifmaxNum==count:#如果这个值和 maxNum 相同,那么 minLen 需要更新ifminLen>(span:=right-left+1):#对⽐ minLen 和当前这个元素的前后位置差minLen=span#取较⼩值returnminLen