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