腾讯50题打卡训练

1 最小栈

题目描述为在常数时间内找到栈的最小值,所以不能通过遍历去找最小值
考虑在入栈的时候建一个辅助栈。最终目标是常数时间取栈顶元素。在push,pop,top环节均需注意
辅助栈需要和栈保持长度一致 (没想明白)

# 题目描述为在常数时间内找到栈的最小值,所以不能通过遍历去找最小值
# 考虑在入栈的时候建一个辅助栈。最终目标是常数时间取栈顶元素。在push,pop,top环节均需注意
# 辅助栈需要和栈保持长度一致 ??

class minstack:
    def __init__(self): 
        self.list = []    
        self.helper = []  # 建一个辅助栈
    
    def push(self,x:int): 
        if len(self.helper) == 0 or x < self.list[-1]:
            self.list.append(x)
            self.helper.append(x)
        else:
            self.helper.append(self.helper[-1])
            
        return 0         # 无返回值,但是毕竟是函数,得有返回值
    
    def pop(self):
        self.list.remove(-1)
        return 0
  
    def top(self):  
        return self.list[0]
    
    def getMin(self):
        min = 10000000
        for i in range(len(self.list)):
            if self.list[i] < min:
                min = self.list[i]
        return min
  
a = minstack()
a.push(1)
a.push(2)
print(a.getMin())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值