需要實現乙個佇列,這個佇列中放入視窗裡的元素,
隨著視窗的移動,佇列也一進一出,
每次移動之後,佇列顯示裡面的最大值
這個佇列就是單調佇列
1.單調佇列(遞增或遞減)
佇列中列表中的元素永遠是單調遞減的,第乙個值永遠是最大的,
進來乙個比第乙個值還大的值以後
就把新進來的這個值前面的值都踢出去
佇列永遠是單調遞減的
2.佇列沒有必要維護視窗裡的所有元素,
只需要維護有可能成為視窗裡最大值的元素就可以了,
同時保證隊裡裡的元素數值是由大到小的。
}//新增元素時,如果要新增的元素大於入口處的元素,就將入口元素彈出
//保證佇列元素單調遞減
//比如此時佇列元素3,1,2將要入隊,比1大,所以1彈出,此時佇列:3,2
void add(int
val)
deque.add(val);
}//佇列隊頂元素始終為最大值
intpeek()
}class
solution
int len = nums.length - k + 1;
//存放結果元素的陣列
int res = new
int[len];
int num = 0;
//自定義佇列
myqueue myqueue = new
myqueue();
//先將前k的元素放入佇列
for (int i = 0; i < k; i++)
res[num++] =myqueue.peek();
for (int i = k; i < nums.length; i++)
return
res;}}
力扣 239 滑動視窗最大值 維護單調佇列
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。輸入 nums 1 3,1,3 5,3 6,7 和 k 3輸出 3 3,5 5,6 7 解釋 滑動視窗的位置 最大值 1 ...
力扣 單調棧與單調佇列問題
單調棧 1.402.移掉k位數字 需要注意邊界情況,去除完無字元返回 判斷時不能有 號,棧內應該是不嚴格遞增的。2.316.去除重複字母 需要借助雜湊表來統計出現次數,並且標記是否已經存在於棧內。3.84.柱狀圖中最大的矩形,挺難的,針對每乙個柱需要確定左右比它低的作為邊界,正向遍歷單調棧確定左邊界...
OJ題 設計迴圈佇列 力扣
題目 思路 不是每次都進行數字搬移 直到後面沒空間了再一次性搬移到前面 陣列中實現對列 class mycircularqueue insert an element into the circular queue.return true if the operation is successful...