雖然可以定義乙個變數儲存最小值,但是考慮後續pop操作可能使得該最小值被彈出,因此使用輔助棧-最小值棧,與當前棧長度一致,每位代表當前最小值。
時間複雜度:o(1)
空間複雜度:o(2n)
class
solution
:def
__init__
(self)
: self.stack =
self.minstack =
defpush
(self, node)
: pre_min = self.
min()if
not pre_min or node < pre_min:
else
:def
pop(self)
:if self.stack:
self.minstack.pop(
) self.stack.pop(
)def
top(self)
:return self.stack[-1
]if self.stack else
none
defmin
(self)
:return self.minstack[-1
]if self.minstack else
none
class solution
void
pop()}
inttop()
intmin()
};
劍指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 ...