題解設計乙個支援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...