自学内容网 自学内容网

【数组的度】leetcode,python

一种很菜的做法(暴力),for循环(样例能过一大半呢,复杂度的话。。。)

class Solution:
    def findShortestSubArray(self, nums: List[int]) -> int:
        n=len(nums)
        if n==1:
            return n
        mx=1
        #出现次数最多的计算
        for i in range(n):
            start=nums[i]
            num=0
            for j in range(n):
                if nums[j]==start:
                   num+=1
            if num>mx:
                mx=num
        mn=50001
        for i in range(n):
            set=1
            star=nums[i]
            for j in range(i+1,n):
                if nums[j]==star:
                    set+=1
                    if set==mx:
                        if mn>(j-i):
                            mn=j-i
        return (mn+1)


        
        


            

优化的话无非就是把两层for循环弄掉,改了一下发现不仅要找值,还要记录对应的下标,嗯。

这个时候我们需要用到字典

mp=dict()
mp['key1']='value1'
mp['key2']='value2'

正解:

class Solution:
    def findShortestSubArray(self, nums: List[int]) -> int:
        n=len(nums)
        #创建字典
        mp=dict()
        #字典中的3个值代表出现次数,首次出现位置,最后一次出现的位置
        for i,num in enumerate(nums):
            if num in mp:
                mp[num][0]+=1
                mp[num][2]=i
            else:
                mp[num]=[1,i,i]
        mx=mn=0
        for count,left,right in mp.values():
            if mx<count:
                mx=count
                mn=right-left+1
            elif mx==count:
                #这个:=能够使得赋值语句正确出现在判断语句中
                if mn>(span :=right-left+1):
                    mn=span
        return mn

tql 

 


原文地址:https://blog.csdn.net/m0_73629042/article/details/138917535

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!