給出乙個可能包含重複的整數陣列,和乙個大小為 k 的滑動視窗, 從左到右在陣列中滑動這個視窗,找到陣列中每個視窗內的最大值。
給出陣列[1,2,7,7,8]
, 滑動視窗大小為k = 3
. 返回[7,7,8]
.
解釋:最開始,視窗的狀態如下:
[|1, 2 ,7| ,7 , 8]
, 最大值為7
;
然後視窗向右移動一位:
[1, |2, 7, 7|, 8]
, 最大值為7
;
最後視窗再向右移動一位:
[1, 2, |7, 7, 8|]
, 最大值為8
.
o(n)時間,o(k)的額外空間
關於此題的理解, 為什麼雙端佇列中插如的是數的索引,而不是數的本身?
因為如果是數的本身,我們就無法判斷視窗在移動的時候視窗裡的數時候被移出視窗!
如果插入的是數的索引,那麼該如何找出視窗中的最大值呢?
我們用雙端佇列維護乙個隊首為大數索引,隊尾為小樹索引的佇列, 如果將要插入索引對應的數大於佇列末尾所對應的數,
那麼佇列的末尾元素就被移出(此時將要插入的數和隊尾元素對應的數一定在同一視窗,既然將要插入索引對應的數大於佇列末尾所對應的數,那麼佇列末尾所對應的數一定沒有機會成為視窗中的最大值);如果佇列中隊首值(視窗中元素最大數的索引) 不在新視窗的範圍裡了,那麼也要移出隊首元素。
lintcode 滑動視窗的最大值
給出乙個可能包含重複的整數陣列,和乙個大小為 k 的滑動視窗,從左到右在陣列中滑動這個視窗,找到陣列中每個視窗內的最大值。樣例給出陣列 1,2,7,7,8 滑動視窗大小為k 3.返回 7,7,8 解釋 最開始,視窗的狀態如下 1,2 7 7 8 最大值為7 然後視窗向右移動一位 1,2,7,7 8 ...
滑動視窗的最大值 LintCode
給出乙個可能包含重複的整數陣列,和乙個大小為 k 的滑動視窗,從左到右在陣列中滑動這個視窗,找到陣列中每個視窗內的最大值。樣例 給出陣列 1,2,7,7,8 滑動視窗大小為 k 3.返回 7,7,8 解釋 最開始,視窗的狀態如下 1,2 7 7 8 最大值為 7 然後視窗向右移動一位 1,2,7,7...
最大滑動視窗
題目描述 給定乙個陣列a,有乙個大小為w的滑動視窗,該滑動視窗從最左邊滑到最後邊。在該視窗中你只能看到w個數字,每次只能移動乙個位置。我們的目的是找到每個視窗w個數字中的最大值,並將這些最大值儲存在陣列b中。例如陣列a 1 3 1 3 5 3 6 7 視窗大小w為3。則視窗滑動過程如下所示 wind...