定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 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.
思路
使用一個輔助棧,長度與原棧相同,每個位置代表原棧cut到這個長度時的最小值。
每次push時候同樣需要更新輔助棧:新元素更小則append新元素,否則append輔助棧最後一個元素(意味着新加入一個元素後再cut到這一位,最小值還是之前那個)。pop時候同時pop兩個棧,這樣的結構就可以保證隨時查詢到最小值。
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.mini=[]
self.stack=[]
def push(self, x: int) -> None:
self.stack.append(x)
if self.mini != []:
if x < self.mini[-1]:
self.mini.append(x)
else:
self.mini.append(self.mini[-1])
else:
self.mini.append(x)
def pop(self) -> None:
self.mini.pop()
return self.stack.pop()
def top(self) -> int:
return self.stack[-1]
def min(self) -> int:
return self.mini[-1]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof