題目:給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小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...