题目链接:https://leetcode-cn.com/problems/min-stack/
难度:简单
描述:
设计一个支持push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val
推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
提示:
pop
、top
和getMin
操作总是在非空栈上调用
题解
思路:
我们维持两个栈,一个普通栈存放元素,另一个栈存放最小元素。
当元素推入栈中时,若元素比栈中最小元素小,则同样将该元素推入最小栈中,否则将最小栈的栈顶元素复制后推入栈中。这样最小栈栈顶总是普通栈中的最小元素
当弹出元素时,弹出普通栈和最小栈中的元素。
class MinStack:
def __init__(self):
self.stk = []
self.min_stk = []
def push(self, val: int) -> None:
if not self.stk:
self.stk.append(val)
self.min_stk.append(val)
else:
self.stk.append(val)
if val < self.min_stk[-1]:
self.min_stk.append(val)
else:
self.min_stk.append(self.min_stk[-1])
def pop(self) -> None:
self.min_stk.pop()
self.stk.pop()
def top(self) -> int:
return self.stk[-1]
def getMin(self) -> int:
return self.min_stk[-1]