python刷题解题教程_力扣刷题Python笔记:最小栈

题目

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) —— 将元素 x 推入栈中。

pop() —— 删除栈顶的元素。

top() —— 获取栈顶元素。

getMin() —— 检索栈中的最小元素。

79fe0210ae3776f161d1f8166b6a2e0c.png

提示:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值