剑指 Offer 30. 包含min函数的栈

 快速实现代码:

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        #申请二维数组,一维存数据,一维存当前最小值
        self.stack = list()
        self.topnum = -1

    def push(self, x: int) -> None:
        #如果当前为空,直接保存两个值
        if self.topnum == -1:
            self.topnum +=1
            self.stack.append([x,x])
        else:
            #取得当前数组最小值
            minnum = self.stack[self.topnum][1]
            #如果输入值更小,存输入值
            if minnum > x:
                self.topnum += 1
                self.stack.append([x,x])
            else:
                self.topnum +=1
                self.stack.append([x,minnum])



    def pop(self) -> None:
        #当栈中没有元素,返回空
        if self.topnum == -1:
            return None

        self.topnum -= 1
        self.stack.pop()

    def top(self) -> int:
        if self.topnum == -1:
            return None
        res = self.stack[self.topnum][0]
        return res 
        
    def min(self) -> int:
        if self.topnum == -1:
            return None
        res = self.stack[self.topnum][1]
        return res

【主要思路】使用二维数组同时记录值和状态最小值。保证时间复杂度为O(1),

此处空间复杂度为O(2n)=O(n)

【错误记录】

TypeError: 'int' object is not callable result = obj.top(); Line 70 in __helper_select_method__ (Solution.py) ret.append(__DriverSolution__().__helper_select_method__(method, params[index], obj)) Line 108 in _driver (Solution.py) _driver() Line 118 in <module> (Solution.py)

粗心:变量名和函数名没有注意区分

【深入研究】待续~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑾怀轩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值