给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。
你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/degree-of-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
正解
class Solution: def findShortestSubArray(self, nums: List[int]) -> int: #要找到数组的度 #还要找到那个重复最大的数,可能不止一个 #找到这个数出现的最左端和最右端 #最左端减去最右端,取最小值 left, right = dict(), dict() counter=collections.Counter(nums) for i,num in enumerate(nums): if num not in left: left[num]=i right[num]=i#此后再遇到这个数就只记录和更新它的右端了 #还要记录频数 degree = max(counter.values()) res=len(nums) for k,v in counter.items(): if v==degree: res=min(res,right[k]-left[k]+1) return res
class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
#要找到数组的度
#还要找到那个重复最大的数,可能不止一个
#找到这个数出现的最左端和最右端
#最左端减去最右端,取最小值
left, right = dict(), dict()
counter=collections.Counter(nums)
for i,num in enumerate(nums):
if num not in left:
left[num]=i
right[num]=i#此后再遇到这个数就只记录和更新它的右端了
#还要记录频数
degree = max(counter.values())
res=len(nums)
for k,v in counter.items():
if v==degree:
res=min(res,right[k]-left[k]+1)
return res