給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
不能每次選取範圍再比較,這樣時間複雜度太高。可以建立乙個佇列,佇列首部是最大值索引,每次要先去掉小於當前數的所有索引,再去掉滑動視窗外的索引:
# -*- coding:utf-8 -*-
class
solution
:def
maxinwindows
(self, num, size)
:# write code here
res, queue =
,[]# 結果,索引佇列
if size ==0:
return res
for i in
range
(len
(num)):
begin = i-size+
1# 開始的位置
while queue and num[queue[-1
]]< num[i]
:# 去掉小於i處數的所有索引
queue.pop(-1
)while queue and begin > queue[0]
:# 去掉過了的最大數索引
queue.pop(0)
if begin >=0:
0]])
return res
劍指offer 64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 滑動視窗應當是佇列,但為了得到滑動視窗的最大值,佇列序可以從兩端刪除元素,因此使用雙端佇列。原則 對新來的元素k,將其與雙端...
劍指offer64 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 視窗大於陣列長度的時候,返回空 示例1輸入 2,3,4,2,6,2,5,1 3 返回值 4,4,6,6,6,5 思路1 暴力...
劍指offer(64)滑動視窗中的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 這道題我們需要轉換下參考物件,像物理學中一樣。題目描述的是滑動視窗在陣列上移動。如果我們以滑動視窗為物件,那麼就是陣列在滑動...