題目描述
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間複雜度都是 O(1)。
思路
代碼
class MinStack:
def __init__(self):
self.A, self.B = [], []
def push(self, x:int)->None:
self.A.append(x)
if not self.B and self.B[-1] >= x:
self.B.append(x)
def pop(self)->None:
if self.A.pop() == self.B[-1]:
self.B.pop()
def top(self)->int:
return self.A[-1]
def min(self)->int:
return self.B[-1]
複雜度
時間複雜度 O(1) : push(), pop(), top(), min() 四個函數的時間複雜度均爲常數級別。
空間複雜度 O(N): 當共有 N個待入棧元素時,輔助棧 BB 最差情況下存儲 N 個元素,使用 O(N) 額外空間。