題目描述:給定乙個非空且只包含非負的整數組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...