佇列和棧 064 滑動視窗的最大值 雙端佇列

2021-09-29 01:56:03 字數 1233 閱讀 7795

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。

# 方法一

class

solution

:def

maxinwindows

(self, num, size)

:# write code here

ifnot num or

len(num)

< size or size==0:

return

numwindow =

len(num)

- size +

1 res =

for i in

range

(numwindow)

:max

(num[i:i+size]))

return res

# 方法二

class

solution

:def

maxinwindows

(self, nums, k)

:"""

:type nums: list[int]

:type k: int

:rtype: list[int]

"""#嚴謹判斷輸入的數字是否合法

ifnot nums or k<=

0or k>

len(nums)

:return

window, res =

,for i, x in

enumerate

(nums)

:if i>=k and window[0]

<= i-k:

#視窗滑動時的規律 彈出過期元素。

window.pop(0)

while window and nums[window[-1

]]<= x:

#把最大值左邊的數小的就清除。

window.pop(

)if i >= k-1:

0]])

return res

JZ 064 滑動視窗的最大值

滑動視窗的最大值 題目描述給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 題目鏈結 滑動視窗的最大值 import j a.util.arraylist import j ...

滑動視窗的最大值 佇列的最大值

請定義乙個佇列並實現函式max得到佇列裡的最大值,要求函式max push back和 pop front的時間複雜度都是o 1 在佇列中維護乙個儲存最大值的佇列,當pop和push操作的同時也對最大值佇列進行維護。當彈出的時佇列中的最大值時,也彈出最大值佇列的頭,當壓入新值時,對最大值佇列從後向前...

棧與佇列 單調佇列解決滑動視窗最大值

設計單調佇列的時候,pop,和push操作要保持如下規則 pop value 如果視窗移除的元素value等於單調佇列的出口元素,那麼佇列彈出元素,否則不用任何操作 push value 如果push的元素value大於入口元素的數值,那麼就將佇列入口的元素彈出,直到push元素的數值小於等於佇列入...