题目
LeetCode155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
题解
class MinStack:
def __init__(self):
from queue import LifoQueue
self._stack = LifoQueue()
self._tmp_stack = LifoQueue()
self._min = None # 维护一个最小值
def push(self, val: int) -> None:
self._min = val if self._min is None else min(self._min, val)
self._stack.put(val)
def pop(self) -> None:
tmp = self._stack.get()
if tmp == self._min:
self._min = None
while not self._stack.empty():
val = self._stack.get()
self._min = val if self._min is None else min(self._min, val)
self._tmp_stack.put(val)
while not self._tmp_stack.empty():
self._stack.put(self._tmp_stack.get())
def top(self) -> int:
val = self._stack.get()
self._stack.put(val)
return val
def getMin(self) -> int:
return self._min
if __name__ == '__main__':
obj = MinStack()
obj.push(0)
obj.push(1)
obj.push(0)
print(obj.top())
obj.pop()
print(obj.top())
print(obj.getMin())
print(obj.top())