定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。
在壓元素進棧時,同時此時棧內元素與當前元素的最小值也壓入輔助棧。彈出時,對應最小值輔助棧的元素也對應彈出。
# -*- coding:utf-8 -*-
class
solution
:def
__init__
(self)
: self.stack =
# 初始化棧
self.stack_min =
# 輔助最小值棧
defpush
(self, node)
:# write code here
# 將新元素壓入棧
ifnot self.stack:
# 若棧為空,則當前元素即為最小值,直接壓入輔助棧
elif self.
min(
)> node:
# 若棧內最小元素大於當前元素,則輔助棧壓入當前元素
else
:# 若棧內最小元素小於等於當前元素,則輔助棧壓入當前最小元素
min())
defpop
(self)
:# write code here
if self.stack_min:
# 若輔助棧不為空,則彈出
self.stack_min.pop(
)return self.stack.pop(
)def
top(self)
:# write code here
if self.stack:
# 若棧不為空,則輸出棧頂元素
return self.stack[-1
]def
min(self)
:# write code here
if self.stack_min:
# 若輔助棧不為空,則輸出輔助棧棧頂元素,也即當前最小元素
return self.stack_min[-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 時間得到最小元素。但是...
劍指offer 20 包含min函式的棧
主流想法 在看到這道題目的時候第一反應是要用乙個最小值來保留當前棧中最小值,但是也能夠很快地意識到比較麻煩的地方在於pop的時候怎麼更新min值,看了別人的題解之後都是使用了另外乙個棧來保持在入棧過程中曾經做過最小值的值,pop的時候判斷兩個棧頂元素是否一致,一致的話都要pop,在這種情況下取最小值...