leetcode 滑動視窗最大值

2021-09-25 08:29:19 字數 1642 閱讀 1359

如果只是想做大這件事件非常簡單,在每一段都取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個 幾個注意點 利用雙端佇列實現,如果後者比前者大,前者丟擲,後者進,如果比前者小,壓入佇列,判斷隊頭是否過期,這就需...