#-*- 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...