定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。
在該棧中,呼叫min、push及pop的時間複雜度都是o(1)。
首先觀察到min的時間複雜度是o(1),所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就是最小值不可能是個單值,必須有辦法回溯。因此,可以將最小值也做成乙個棧,同步push和pop。如果push進的元素小於當前最小值,則push該元素值進min_stack,否則push當前最小值進min_stack。我採用的方法是直接將min與val繫結成乙個tuple進棧,大同小異。
時間複雜度:o(1)
空間複雜度:o(n)
class
minstack
(object):
def__init__
(self)
:"""
initialize your data structure here. """
self.data =
defpush
(self, x)
:"""
:type x: int
:rtype: void
"""if self.data:
min= x if self.data[-1
][1]
>= x else self.data[-1
][1]
else
:min
= x(x,
min)
)return
defpop
(self)
:"""
:rtype: void
"""self.data.pop(
)return
deftop
(self)
:"""
:rtype: int
"""return self.data[-1
][0]
defgetmin
(self)
:"""
:rtype: int
"""return self.data[-1
][1]
劍指offer 30 包含min函式的棧
這道題的題目可以描述為 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o 1 typedef int datatype define maxsize 100 typedef structstack void stack...
劍指offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 常規思路的問題 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o 1 如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個...
劍指offer 30 包含min函式的棧
題目鏈結 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minsta...