設計乙個支援push,pop,top等操作並且可以在o(1)時間內檢索出最小元素的堆疊。
樣例
minstack minstack =
newminstack()
;minstack.
push(-
1);minstack.
push(3
);minstack.
push(-
4);minstack.
getmin()
;--> returns -
4.minstack.
pop();
minstack.
top();
--> returns 3.
minstack.
getmin()
;--> returns -
1.
這道題思路倒是不難,用兩個棧就行了。乙個棧stack1是普通的棧,儲存壓入的元素,另乙個棧stack2儲存當前stack1中所有元素的最小值。
push()的具體做法是:直接壓入stack1,如果stack2為空或者即將壓入的元素小於stack2的棧頂元素,就直接壓入stack2。反之,就壓入stack2的棧頂元素(相當於複製了乙個最小值)。這麼做是為了在彈出元素的時候一樣能保證stack2裡的元素是最小的。因為stack1和stack2要一同彈出。
class
minstack
public
void
push
(int x)
else
}public
void
pop()}
public
inttop()
public
intgetmin()
}/**
* 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();
*/
劍指offer 包含min函式的棧
一 問題描述 二 思路 兩個棧,乙個當前棧data,乙個輔助棧m min,輔助棧用來儲存當前的最小值,如果出棧,輔助棧也出棧,棧頂元素始終是當前的最小值。在入棧時,如果輔助棧為空或者當前值小於輔助棧棧頂元素,則將當前值加入輔助棧 否則將輔助棧的棧頂元素加入輔助棧,表明此次有大於min棧頂數字入棧。以...
劍指offer 包含min函式的棧
題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。這個題要求時間複雜度是o 1 竟然想了好久沒想出來,原來思維定式了,一直在想既然要從小到大排序怎麼可能實現o 1 呢 其實由於出棧入棧是由順序的,用來記錄最小值的棧也不用完整記錄所有元素的順序,只要根據入棧的順序來就行 ...
劍指offer 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。思路 這裡,定義兩個棧,stack和min stack,其中,min stack的最後乙個數永遠保持是stack中最小的乙個數。具體的,在puch時,只儲存比當前最小的還要小的數。pop時,如果stack最小的數pop出,min ...