最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。
void push(int val)
将元素val推入堆栈。
void pop()
删除堆栈顶部的元素。
int top()
获取堆栈顶部的元素。
int getMin()
获取堆栈中的最小元素。
# 引入堆
import heapq
class MinStack:
def __init__(self):
self.stack = []
self.min_heap = []
def push(self, val: int) -> None:
self.stack.append(val)
heapq.heappush(self.min_heap, val)
def pop(self) -> None:
if self.stack:
self.stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
if self.stack:
# 若当前堆顶元素不在栈中,则弹出
while self.min_heap[0] not in self.stack:
heapq.heappop(self.min_heap)
return self.min_heap[0]