劍指Offer 30 包含min函式的棧

2021-09-08 20:31:47 字數 1107 閱讀 6539

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的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...