定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。
常規思路的問題:
如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o(1)
如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個變數存次小值,這樣的問題是第三小的值你還得找個變數存,無窮盡也。
因此,提出使用乙個輔助棧的方法:
當棧為空時,將乙個值push進棧和輔助棧
第二個數來時,比較這個數和輔助棧中的數哪個大,如果這個數大,就繼續push輔助棧中那個較小的數進入輔助棧,如果當前數小,就push這個小的數進入輔助棧。
push的情況依次類推,在輔助棧中的數從頂往下必然是遞增的。因此棧頂一定是最小的書,第二個就是次小,往下越來越大。
pop時,把輔助棧的元素一起pop出來。也就是更新當棧頂元素進入棧造成的大小值的影響。
劍指Offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...
劍指offer 30 包含min函式的棧
這道題的題目可以描述為 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o 1 typedef int datatype define maxsize 100 typedef structstack void stack...
劍指offer 30 包含min函式的棧
題目鏈結 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minsta...