資料結構與演算法 (3)單調棧

2021-10-09 11:18:18 字數 572 閱讀 1886

單調棧即滿足單調性的棧,在單調棧中,從棧頂到棧底的元素是嚴格遞增或者遞減的。單調棧的維護是o(n

)o(n)

o(n)

的時間複雜度的,因為所有的元素只會進棧一次且出棧後再也不會進棧了。

單調棧中元素進棧的過程如下:

/**

分析:如上圖所示,當遍歷到某些柱子時,當前柱子會和之前的某個柱子形成凹坑而接住雨水。

當柱子數小於3時,無論如何也無法接住雨水,故返回0;

考慮用單調遞減棧實現

*/class

solution

int water =0;

stack

stack =

newstack

<

>()

;for

(int i =

0;i < height.length;i++)if

(!stack.

isempty()

)}stack.

add(i);}

return water;

}}

資料結構與演算法 06 單調棧

顧名思義,單調的棧,可遞增或遞減,主要用於求解nge問題 next greater element 4 1,彈出1,棧為空,壓入4 2 4,壓入4 3 2,彈出2,3 4,壓入4 5 3,彈出3,5 4,彈出4,棧為空,壓入5 可以發現,每當有數被彈出時,將要入棧的數就是第乙個比彈出的數大的數 模板...

資料結構 單調棧與單調佇列

830.單調棧 154.滑動視窗 79.滑動視窗的最大值 單調棧的應用場景 求最近的最值 單調佇列的應用場景 求滑動視窗內的最值 單調佇列步驟 值得注意的是單調佇列存的是下標,方便判斷隊頭是否滑出視窗 1.判斷隊頭是否滑出視窗 2.判斷完之後那麼隊頭就是滑動視窗的最值,處理題目邏輯 順序不一定在2,...

資料結構 單調棧與單調佇列

單調棧是棧內元素具有嚴格單調性的一種資料結構。由於我們要找到每個數左邊第乙個比它小的數,那麼我們便可以發現 對於棧中任意乙個數,如果在它右邊存在乙個數比它小 或相等 那麼這個數便是不可能被選中的,直接彈出棧即可。於是我們便可以進行如下操作 按序列舉每乙個數,準備將當前這個數壓棧時,從棧頂開始遍歷,如...