lintcode 滑動視窗的最大值 雙端佇列

2021-09-20 13:43:02 字數 996 閱讀 2827

給出乙個可能包含重複的整數陣列,和乙個大小為 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...