給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
如果採用蠻力法,掃瞄每乙個滑動視窗並找出最大值,時間複雜度會比較高。
這裡我們採用乙個雙端佇列來處理這個問題,佇列存放陣列下標,隊首儲存當前視窗最大值的下標。
每當視窗滑動一次,我們需要做兩件事情:
1.剔除掉佇列裡小於新增值的資料
2.檢視當前最大值是否過期
# -*- coding:utf-8 -*-
from collections import deque
class solution:
def maxinwindows(self, num, size):
# write code here
q = deque()
array =
if len(num) >= size and size > 0:
for i in range(size):
while len(q) > 0
and num[i] > num[q[-1]]:
q.pop()
for i in range(size, len(num)):
while len(q) > 0
and num[i] > num[q[-1]]:
q.pop()
if len(q) > 0
and (i - q[0]) > (size - 1):
q.popleft()
return array
刷題 滑動視窗的最大值
題目 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 視窗大於陣列長度的時候,返回空 示例 輸入 2,3,4,2,6,2,5,1 3 輸出 4,4,6,6,6,5 思路 應...
刷演算法 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 仔細想想,對於陣列來說,假如視窗大小為3,則整個過程如下 此時最大值是4 此時最大值是4 此時最大值是6,因為新進入視窗的6...
刷演算法 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 仔細想想,對於陣列來說,假如視窗大小為3,則整個過程如下 此時最大值是4 此時最大值是4 此時最大值是6,因為新進入視窗的6...