每日一题力扣697

给定一个非空且只包含非负数的整数数组 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
原文地址:https://www.cnblogs.com/liuxiangyan/p/14443699.html