題目描述:
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,
調用 min、push 及 pop 的時間複雜度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
思路:要模擬出棧中先進後出的特點。
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
#數組實現棧的效果,其中輔助棧儲存最小值
self.stack1=[]
self.stack2=[]
def push(self, x: int) -> None:
if not self.stack1:
self.stack1.append(x)
self.stack2.append(x)
else:
self.stack1.append(x)
y=self.stack2[-1]
if x<y:
self.stack2.append(x)
else:
self.stack2.append(y)
def pop(self) -> None:
if not self.stack1:
return None
else:
self.stack2.pop()
return self.stack1.pop()
def top(self) -> int:
if not self.stack1:
return None
else:
return self.stack1[-1]
def min(self) -> int:
if not self.stack1:
return None
else:
return self.stack2[-1]
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.min()