滑動視窗最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。
例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
題解使用遞減的單調佇列記錄當前佇列的遞減數,佇列首元素就是當前視窗的最大值
遍歷陣列,設定i,j代表視窗起點和終點
當隊頭等於視窗起點前乙個值時(在視窗外),刪除隊頭
將佇列中小於視窗終點的值清除再插入視窗終點值,維持佇列遞減特性
獲取隊頭值存入返回的陣列
function
maxinwindows
(nums, size)
/* 將nums[j]加入遞減佇列 */
while
(dequeue.length && dequeue[dequeue.length -1]
< nums[j]
) dequeue.
push
(nums[j]);
/* 將當前最大值加入 */
if(i >=
0) res.
push
(dequeue[0]
);}// console.log(res)
return res;
}maxinwindows([
2,3,
4,2,
6,2,
5,1]
,3);
// [ 4, 4, 6, 6, 6, 5 ]
棧與佇列 單調佇列解決滑動視窗最大值
設計單調佇列的時候,pop,和push操作要保持如下規則 pop value 如果視窗移除的元素value等於單調佇列的出口元素,那麼佇列彈出元素,否則不用任何操作 push value 如果push的元素value大於入口元素的數值,那麼就將佇列入口的元素彈出,直到push元素的數值小於等於佇列入...
滑動視窗的最大值 佇列的最大值
請定義乙個佇列並實現函式max得到佇列裡的最大值,要求函式max push back和 pop front的時間複雜度都是o 1 在佇列中維護乙個儲存最大值的佇列,當pop和push操作的同時也對最大值佇列進行維護。當彈出的時佇列中的最大值時,也彈出最大值佇列的頭,當壓入新值時,對最大值佇列從後向前...
力扣 239 滑動視窗最大值 維護單調佇列
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。輸入 nums 1 3,1,3 5,3 6,7 和 k 3輸出 3 3,5 5,6 7 解釋 滑動視窗的位置 最大值 1 ...