最小棧的實現

2021-10-24 05:06:16 字數 1566 閱讀 4343

#-*- coding : utf-8 -*-

'''實現乙個棧,該棧帶有出棧(pop)、入棧(push)、取最小元素(getmin)3個方法。

要保證這3個方法的時間複雜度都是o(1)

'''class

minstack()

:#定義列表

def__init__

(self)

: self.stack=

#入棧def

push

(self,value)

:#出棧

defpop

(self)

:if self.stack:

self.stack.pop(

)else

:raise lookuperror(

'stack is empty'

)#判斷空

defis_empty

(self)

:return

notbool

(self.stack)

#取出最新的數

deftop

(self):if

(self.stack)

:return self.stack[-1

]class

stack()

:#定義列表

def__init__

(self)

: self.stack=

#入棧def

push

(self,value)

:#print(m.is_empty())

if(m.is_empty(

)or value <= m.top())

: m.push(value)

#出棧def

pop(self)

:if self.stack:

if(self.top(

)==m.top())

: m.pop(

) self.stack.pop(

)else

:raise lookuperror(

'stack is empty'

)#判斷空

defis_empty

(self)

:return

notbool

(self.stack)

#取出最新的數

deftop

(self):if

(self.stack)

:return self.stack[-1

]s=stack(

)m=minstack(

)s.push(4)

s.push(9)

s.push(7)

s.push(3)

s.push(8)

s.push(5)

print

(m.top())

s.pop(

)s.pop(

)s.pop(

)print

(m.top(

))

最小棧的實現

最小棧的實現 定義兩個棧,乙個資料棧,乙個最小棧 如果最小棧為空就直接把number壓人棧中 最小棧不為空,就把number與最小棧的棧頂元素進行比較,如果小於最小棧的棧頂元素,就把number壓入最小棧,否則就把number壓入datastack中,最後返回最小棧的棧頂元素就是最小值 includ...

最小棧的實現

題目 實現乙個棧,該棧帶有出棧 pop 入棧 push 取最小元素 getmin 3個方法,要保證這3個方法的時間複雜度都是o 1 解題思路 設原有的棧叫做棧a,此時建立乙個額外的 備胎 棧b,用於輔助棧a 當第乙個元素進入棧a,讓新元素也進入棧b。這個唯一的元素就是棧a的當前最小值。之後每當新元素...

最小棧 最小棧的實現與優化

實現乙個最小棧,一步一步優化,從額外空間o n 到o 1 push,pop,top,getmin都是o 1 時間。空間消耗o n 如何優化到o 1 class minstack1 void pop int top int getmin 如何只用乙個棧實現最小棧的實現?入棧順序 2,1,3,4,2,0...