Leetcode 打卡系列 1

2021-10-06 17:34:55 字數 1129 閱讀 5833

題目描述:給定乙個非空且只包含非負的整數組nums,陣列的度定義是指數組裡任一元素出現頻數的最大值。

任務:找到與nums擁有相同大小的度的最短連續子陣列,返回其長度

示例:輸入:[1, 2, 2, 3, 1]

輸出:2

思路:用3個字典分別儲存每個元素第一次出現位置、最後一次出現位置和出現次數,最短的陣列就是x的一次出現到最後一次出現的陣列。

#參考**

class

solution

:def

findshortestsubarray

(self, nums: list[

int])-

>

int:

""" 定義3個字典,left:每個元素第一次出現的位置

right:每個元素最後一次出現的位置

count:每個元素出現的次數

"""left,right,count =,,

#i代表的是nums裡面每個元素索引值,x代表索引值相對應的值

for i, x in

enumerate

(nums)

:#left只記錄元素第一次出現的索引值

if x not

in left: left[x]

= i #right記錄最後一次出現的位置,需要進行更新

right[x]

= i #count.get(x,0):返回count裡鍵值x所對應的值,不存在則返回0

#記錄每個元素出現的次數

count[x]

= count.get(x,0)

+1ans =

len(nums)

#count字典裡面所有值中的最大值,即出現最多的次數

degree =

max(count.values())

for x in count:

if count[x]

== degree:

#如果存在,則最小長度等於元素最後一次出現的位置-第一次出現的位置再加上1

ans =

min(ans, right[x]

- left[x]+1

)return ans

leetcode打卡系列 1

這道題是leetcode的第三題,也是比較經典的一道。題目說讓找到任意乙個字串的無重複字元的子串。如 abcabcbb 的無重複字元的最長子串是 abc 所以輸出長為3。解題的常規思路有以下兩種 一 暴力列舉 對給定字串進行列舉,找到原始字串的所有子字串 兩層for迴圈即可 接著對所有的字串進行判斷...

leetcode打卡系列 3

給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。示例 輸入 1,2,3,4 輸出 24,12,8,6 def func nums left right output left value...

LeetCode演算法打卡

475.供暖器 冬季已經來臨。你的任務是設計乙個有固定加熱半徑的供暖器向所有房屋供暖。現在,給出位於一條水平線上的房屋和供暖器的位置,找到可以覆蓋所有房屋的最小加熱半徑。所以,你的輸入將會是房屋和供暖器的位置。你將輸出供暖器的最小加熱半徑。說明 給出的房屋和供暖器的數目是非負數且不會超過 25000...