8 包含min函式的棧

2022-04-27 11:03:08 字數 1207 閱讀 8791

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的最小...