力扣 239 滑動視窗最大值 維護單調佇列

2021-10-05 23:37:36 字數 1775 閱讀 1203

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。

返回滑動視窗中的最大值。

輸入: nums =[1

,3,-

1,-3

,5,3

,6,7

], 和 k =

3輸出:[3

,3,5

,5,6

,7] 解釋:

滑動視窗的位置 最大值--

----

----

----

----

--[1

3-1]

-353

6731

[3-1

-3]5

3673

13[-

1-35

]367

513-

1[-3

53]6

7513

-1-3

[536

]761

3-1-

35[3

67]7

最簡單的方法,維持滑動視窗的單調佇列。

每滑動一下,視窗就丟掉乙個值,加入乙個值,就需要維護佇列。

def

add(n)

:while

true:if

not ls or ls[-1

]>=n:

break

else

: ls.pop(

)def

delete

(n):

if ls and ls[0]

==n:

ls.pop(

0)

class

solution

:def

maxslidingwindow

(self, nums: list[

int]

, k:

int)

-> list[

int]:if

not nums:

return

defadd

(n):

while

true:if

not ls or ls[-1

]>=n:

break

else

: ls.pop(

)def

dep(n)

:if ls and ls[0]

==n:

ls.pop(0)

ls=for i in

range

(k):

add(nums[i]

) res=

for i in

range

(k-1

,len

(nums)):

0]) dep(nums[i+

1-k]

)if i+

1<

len(nums)

: add(nums[i+1]

)return res

執行用時 :88 ms, 在所有 python3 提交中擊敗了65.88%的使用者

記憶體消耗 :17.1 mb, 在所有 python3 提交中擊敗了100.00%的使用者

力扣 困難 239 滑動視窗最大值

給你乙個整數陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 1 輸入 nums 1,3,1,3,5,3,6,7 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 ...

239 滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...

239 滑動視窗最大值

239.滑動視窗最大值 solution deque solution maxindex 暴力法的時間複雜度為 o n k 弊端為每次掃瞄視窗的最大值,每兩次掃瞄之間都會存在重複的值比較,已經知道了他們的最大值是誰了,所以要減少比較次數 為什麼新增的是索引 將i加到隊尾 deque.addlast ...