刷題 滑動視窗的最大值

2021-10-21 06:57:20 字數 887 閱讀 8848

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

視窗大於陣列長度的時候,返回空

示例:輸入:[2,3,4,2,6,2,5,1],3

輸出:[4,4,6,6,6,5]

思路:應用雙向佇列,儲存目前仍可能成為最大值的數的index,若最大值超出滑窗範圍,則pop出去,若來的值比當前佇列中的最小值要小,那麼當佇列中的最大值逐漸超出滑窗範圍時,仍是有機會成為最大值的,因此要入列,若來的值比當前佇列中的最小值要大,那麼佇列中所有小於當前的數的值都沒有機會成為最大值了,(因為當前數的index更靠後,並且數值更大)因此彈出佇列中所有比當前值小的數。(佇列裡其實是乙個降序)

code:

# -*- coding:utf-8 -*-

class solution:

def maxinwindows(self, num, size):

# write code here

if len(num) < size:

return

else:

result =

queue =

i = 0

while i < len(num):

while len(queue)>0 and i-size+1 > queue[0]:

queue.pop(0)

while len(queue)>0 and num[queue[-1]] < num[i]:

queue.pop()

if i >= size-1:

i += 1

return result

刷題 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 如果採用蠻力法,掃瞄每乙個滑動視窗並找出最大值,時間複雜度會比較高。這裡我們採用乙個雙端佇列來處理這個問題,佇列存放陣列下標...

刷演算法 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 仔細想想,對於陣列來說,假如視窗大小為3,則整個過程如下 此時最大值是4 此時最大值是4 此時最大值是6,因為新進入視窗的6...

刷演算法 滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 仔細想想,對於陣列來說,假如視窗大小為3,則整個過程如下 此時最大值是4 此時最大值是4 此時最大值是6,因為新進入視窗的6...