給定乙個陣列 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 ...