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
  • 相关阅读:
    Java多线程实现1,继承Thread类
    Java学习笔记二:初始化(一)
    Java学习笔记一:对象与存储
    数据结构学习笔记4.5--二叉树效率
    数据结构学习笔记4.4--删除节点
    数据结构学习笔记4.3--遍历树
    数据结构学习笔记4.2--插入节点
    数据结构学习笔记4.1--查找节点
    数据结构学习笔记3.2—快速排序
    数据结构学习笔记3.1--划分
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14443699.html
Copyright © 2011-2022 走看看