劍指 Offer 30 包含min函式的棧

2021-10-12 00:09:50 字數 1415 閱讀 7092

示例:

minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

minstack.min(); --> 返回 -3.

minstack.pop();

minstack.top(); --> 返回 0.

minstack.min(); --> 返回 -2.

解題思想:本題難點在於min函式的時間複雜度也是o(1).故本題需要設定乙個輔助棧,用來儲存可能的最小值,且最小值就是stackmin棧的棧頂元素。

**如下:

class

minstack

:def

__init__

(self)

:"""

initialize your data structure here.

"""self.stack =

self.stackmin =

defpush

(self, x:

int)

->

none:if

len(self.stackmin)==0

:else

:min

= self.stackmin[-1

]if x <=

min:

defpop

(self)

->

none

:if self.stack ==

:return-1

else

:if self.stack[-1

]== self.stackmin[-1

]:self.stackmin.pop(

)return self.stack.pop(

)def

top(self)

->

int:

if self.stack ==

:return-1

else

:return self.stack[-1

]def

min(self)

->

int:

return self.stackmin[

len(self.stackmin)-1

]

注:

["minstack","push","push","push","min","pop","min"]

[,[0],[1],[0],,,]

可能會顯示超出範圍。

劍指Offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...

劍指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出去後,找不到次小值。當然你也可以找個...