【LeetCode & 劍指offer刷題】棧與佇列題5:59 佇列(滑動視窗)的最大值
阿新 • • 發佈:2019-01-05
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)
59 佇列(滑動視窗)的最大值
題目一:滑動視窗的最大值
給定一個數組和滑動視窗的大小,找出所有滑動窗口裡數值的最大值。例如,如果輸入陣列{2,3,4,2,6,2,5,1}及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為{ 4,4,6,6,6,5}; 針對陣列{2,3,4,2,6,2,5,1}的滑動視窗有以下6個: { [2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。 /*- 同上一題相同,我們要尋找佇列的最大值, 相當與將滑動視窗設定為整個佇列。
- 這裡需要使用兩個佇列, 一個佇列用來儲存入隊的資料, 一個佇列用來儲存佇列的當前最大值。
- 同時需要注意出隊操作,資料佇列 出隊的同時需要判斷其索引是否和當前最大值佇列首部索引相同,如果相同則同時也將最大值佇列頭部出隊。
- min棧的實現:佇列中是尾部插入,首部刪除(滑動視窗是這種情況,故用佇列較好),而min棧較方便,在一端插入和刪除
- 最大值佇列在 push當前值之前,需將之前較小的值出隊處理(從隊尾開始判斷),隊首元素即為當前佇列的最大值