力扣刷题Python笔记:最小栈
作者:互联网
题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) —— 将元素 x 推入栈中。
- pop() —— 删除栈顶的元素。
- top() —— 获取栈顶元素。
- getMin() —— 检索栈中的最小元素。
提示:
- pop、top 和 getMin 操作总是在 非空栈 上调用。
来源:力扣(LeetCode)
Python解法
这道题用的是“备用”栈解法,即除了原来存放数组的栈(主栈)以外,我们还定义了一个最小栈用来存放当前数组的最小值。
具体的解题思路如下:
①当第一个元素放入主栈时,将其也放入最小栈,表示当前主栈最小值就是该元素;
②以后再将元素放入主栈时,将其与最小栈最后一个值进行比较,如果该元素不大于最小栈最后一个元素,将该元素也顺便压入最小栈;
③删除栈顶元素时,如果该元素与最小栈最后一个元素相同,删除最小栈最后一个元素,确保同时更新当前主栈最小值;
④获取栈顶元素——即获取主栈最后一个元素,检索栈中的最小元素——即获取最小栈最后一个元素。
代码如下:
class MinStack:
def __init__(self):
self.main_stack = []
self.min_stack = []
def push(self, x: int) -> None:
self.main_stack.append(x)
if (not self.min_stack) or (x <= self.min_stack[-1]):
self.min_stack.append(x)
def pop(self) -> None:
x = self.main_stack.pop()
if x == self.min_stack[-1]:
self.min_stack.pop()
def top(self) -> int:
return self.main_stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
标签:min,Python,self,元素,最小,力扣,主栈,stack,刷题 来源: https://blog.csdn.net/weixin_45517168/article/details/110259620