如果只是想做大這件事件非常簡單,在每一段都取max即可,但是顯然這樣當k=n/2
的時候不符合線性時間複雜度的要求,所以我們維護乙個列表,放其中的k個數字,然後沒加入乙個新的數字的時候都對其做一定的判斷,將不滿足條件的元素變為false,然後pop掉最前面的元素以及前面的所有false,然後非常容易可以找到最大值。
具體**如下:
class
solution
:def
maxslidingwindow
(self, nums: list[
int]
, k:
int)
-> list[
int]
: res =
ifnot nums:
return res
if k ==1:
return nums
self.data =
[nums[0]
]for i in
range(1
, k)
:for j in
range
(i)[::
-1]:
if self.data[j]
!=false
and self.data[j]
<= nums[i]
: self.data[j]
=false
elif self.data[j]
!=false
and self.data[j]
> nums[i]
:break
) false_count =
0while self.data[0]
==false
: false_count +=
1 self.data = self.data[1:
]0])
for idx in
range
(k,len
(nums)):
for i in
range
(len
(self.data))[
::-1
]:if self.data[i]
!=false
and self.data[i]
<= nums[idx]
: self.data[i]
=false
elif self.data[i]
!=false
and self.data[i]
> nums[idx]
:break
)if false_count ==0:
self.data = self.data[1:
]else
: false_count -=
1while self.data[0]
==false
: self.data = self.data[1:
] false_count +=10
])return res
leetcode 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。高階 示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 ...
leetcode 滑動視窗最大值問題
class solution 如果push的數值大於入口元素的數值,那麼就將佇列後端的數值彈出,直到push的數值小於等於佇列入口元素的數值為止。這樣就保持了佇列裡的數值是單調從大到小的了。void push int value que.push back value 查詢當前佇列裡的最大值 直接返...
滑動視窗最大值
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 幾個注意點 利用雙端佇列實現,如果後者比前者大,前者丟擲,後者進,如果比前者小,壓入佇列,判斷隊頭是否過期,這就需...