力扣239題(單調佇列)

2022-06-20 15:33:10 字數 1006 閱讀 2614

需要實現乙個佇列,這個佇列中放入視窗裡的元素,

隨著視窗的移動,佇列也一進一出,

每次移動之後,佇列顯示裡面的最大值

這個佇列就是單調佇列

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...