AcWing 41 包含min函式的棧

2021-10-17 14:55:52 字數 2003 閱讀 1873

題解設計乙個支援push,pop,top等操作並且可以在o(1)時間內檢索出最小元素的堆疊。

minstack minstack = new minstack();

minstack.push(-1);

minstack.push(3);

minstack.push(-4);

minstack.getmin(); --> returns -4.

minstack.pop();

minstack.top(); --> returns 3.

minstack.getmin(); --> returns -1.

使用兩個棧,棧stk用來正常的儲存資料,棧min_stk用來維護當前棧中最小的元素,使min_stk的棧頂始終儲存最小的元素。這樣每當我們需要獲取最小元素時,直接returnmin_stk的棧頂元素即可。彈出元素時同時彈出兩個棧的棧頂元素即可。主要問題在於min_stk的push操作。第一種方法是我自己想的,第二種是y總的寫法。兩種方法都可以 ac,但是自己的想法比較麻煩,不如y總的簡潔深刻。

push()方法一:

stk每次push進乙個元素都比較一下當前元素和min_stk棧頂元素的大小,如果min_stk為空那麼直接將該元素push到min_stk中,如果比min_stk的棧頂元素小,那麼就將該數push到min_stk中,否則就將min_stk的棧頂元素再push一次。

push()方法二:

先判斷一下min_stk中是否有元素,如果有那麼就比較一下新元素和當前棧頂元素的大小,再將小的元素push到min_stk中。如果min_stk中沒有元素直接將新元素push進去。

class

minstack

void

push

(int x)

else

}void

pop(

)int

top(

)int

getmin()

};/** * your minstack object will be instantiated and called as such:

* minstack obj = new minstack();

* obj.push(x);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.getmin();

*/

class

minstack

void

push

(int x)

void

pop(

)int

top(

)int

getmin()

};/*** your minstack object will be instantiated and called as such:

* minstack obj = new minstack();

* obj.push(x);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.getmin();

*/

未完待續,持續更新中……

41 包含min函式的棧

設計乙個支援push,pop,top等操作並且可以在o 1 時間內檢索出最小元素的堆疊。push x 將元素x插入棧中 pop 移除棧頂元素 top 得到棧頂元素 getmin 得到棧中最小元素 樣例minstack minstack new minstack minstack.push 1 min...

20 包含min的函式

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 在該棧中,呼叫min push及pop的時間複雜度應為o 1 把每次壓棧時的最小元素 每次新壓棧元素和之前的最小元素進行比較 放進另外乙個專門存放最小值的輔助棧中。例如 1 初始空棧,壓入元素3,目前3是最小值,放入輔助棧,...

18 包含min函式的棧

包含min函式的棧 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。劍指offer上的例子講解的非常精彩。error control may reach end of non void function werror,wreturn type 意為無法找到non void fu...