《剑指offer》26、包含min功能的栈

包含min功能的栈:要求设计一个栈,除了正常进出栈以外,还有一个输出最小值的功能。
首先自然而然可以想到python自带的min函数……
其实沿着min函数的思路走,如果我们想要搜索一个list的最小值,我们可以从左往右遍历,然后先找到前两个元素的较小者,再将其与第三个元素比较,得出更小者,再向后比较,以此类推。那么对本题也是类似,我们可以使用上述的判断方法,同时设置一个辅助栈,用于存放当前栈的最小值。设置辅助栈是因为,若最小值出栈了,最小值需要进行更新,因此需要辅助栈来保存次小值。基于这个思路,我们可以很快写出代码。

# offer26-solution
class Solution:
    def __init__(self):
        self.stack = []
        self.minstack = []

    def push(self, node):
        self.stack.append(node)  # 正常入栈
        if self.minstack == [] or node < self.min():  # 辅助栈的push
            self.minstack.append(node)
        else:
            self.minstack.append(self.min())

    def pop(self):
        if self.stack == [] or self.minstack == []:  # 出栈和普通判断
            return None
        self.stack.pop()
        self.minstack.pop()

    def top(self):  # 出栈
        return self.stack[-1]

    def min(self):  # 出辅助栈
        return self.minstack[-1]

比起前面的链表题,和后面的二叉树,这几道题算蛮简单的……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值