主流想法:在看到這道題目的時候第一反應是要用乙個最小值來保留當前棧中最小值,但是也能夠很快地意識到比較麻煩的地方在於pop的時候怎麼更新min值,看了別人的題解之後都是使用了另外乙個棧來保持在入棧過程中曾經做過最小值的值,pop的時候判斷兩個棧頂元素是否一致,一致的話都要pop,在這種情況下取最小值需要從儲存最小值的棧頂元素取值。
技巧:每次壓棧時壓入乙個二元組,包括需要壓入的元素和當前的最小元素。
def
__init__
(self)
: self.q =
defpush
(self, node)
:# write code here
curmin = self.
min(
)if curmin ==
none
or node < curmin:
curmin = node
(node, curmin)
)def
pop(self)
:# write code here
iflen
(self.q)==0
:return
none
else
:return self.q.pop(
)def
top(self)
:# write code here
iflen
(self.q)==0
:return
none
else
:return self.q[
len(self.q)-1
][0]
defmin
(self)
:# write code here
iflen
(self.q)==0
:return
none
else
:return self.q[
len(self.q)-1
][1]
《劍指offer》20 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式。c 實現 思路 應用乙個輔助棧,壓的時候,如果a棧的壓入比b棧壓入大,b棧不壓,小於等於,ab棧同時壓入,出棧,如果,ab棧頂元素不等,a出,b不出。class solution void pop int top int m...
劍指Offer 20 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 注意 保證測試中不會當棧為空的時候,對棧呼叫pop 或者min 或者top 方法。第一反應 每次壓入乙個新元素進棧時,將棧裡的所有元素排序,讓最小的元素位於棧頂,這樣就能在o 1 時間得到最小元素。但是...
劍指offer20 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 對於乙個棧來說,要找到其中的最小值需要遍歷整個棧,時間複雜度為o n 既然要求要o 1 的時間複雜度,就只能考慮用空間來換時間了。那麼已經決定用空間來換時間,下一步就是確定考慮怎麼使用輔助空間。這個輔助...