0 引言
題目:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min、push及pop的時間複雜度都是o(1).1 抽象問題具體化
2 具體問題抽象分析
需要解決的兩個主要問題如下。
(1)如何在複雜度o(1)的條件下,返回當前棧的最小值。解決思路是定義乙個minnum變數儲存當前棧的最小值。
(2)另外乙個問題是如果當前最小值被彈出了,如何更新minnum的值。解決思路是定義乙個新的棧,該棧用於儲存次小的值。涉及到兩步操作:
1)什麼時候入棧:當前入棧的值小於等於最小值時,入棧
2)什麼時候出棧:當前出棧值等於最小值時,更新最小值,出棧
資料棧 stack minorminnum; //
輔助棧int minnum = 99999999; //
最小值void push(int
value)
mystack.push(value);
}void
pop()
if(!minorminnum.empty()) }}
inttop()
intmin()
4 **優化可以將上述變數minnum給省掉,寫法精簡如下。
stackmystack;stack
minorminnum;
void push(int
value)
else
if(value <=minorminnum.top())
minorminnum.push(value);
mystack.push(value);
}void
pop()
}inttop()
intmin()
18 包含min函式的棧
包含min函式的棧 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。劍指offer上的例子講解的非常精彩。error control may reach end of non void function werror,wreturn type 意為無法找到non void fu...
20 包含min函式的棧
思路1 選用存放資料的棧s和存放當前最小值的輔助棧mins,當s記憶體入比當前最小值還小的樹,則該數字入輔助棧,若存放值比當前最小值大,則再次存入當前最小值到輔助棧 這樣mins存在冗餘資訊,可進一步改進。1 class solution else void pop int top int min ...
20 包含min函式的棧
題目 定義乙個棧的資料結構,請在該型別中實現乙個能夠得到棧中最小元素的min函式 思路 可以使用兩個棧,乙個儲存資料,乙個儲存棧中的最小元素。例如 定義兩個棧stack1和stack2,將4壓入stack1,stack2為空,同時將4壓入stack2 然後將2壓入stack1,這時stack1的最小...