zoukankan      html  css  js  c++  java
  • 每日一题力扣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
  • 相关阅读:
    Thrift在微服务中的使用
    MySQL 必知必会
    IDEA 内使用 git
    分布式锁
    LeetCode 图
    LeetCode 位运算
    LeetCode 数组
    LeetCode 字符串
    LeetCode 哈希表
    LeetCode 栈和队列
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14443699.html
Copyright © 2011-2022 走看看