设计一个有getMin功能的栈

本文介绍了两种方法实现一个具有getMin功能的栈,保证push、pop和getMin操作的时间复杂度为O(1)。方法一是每当有新元素入栈时,若该元素小于或等于栈中当前最小值,就将其压入辅助栈;方法二则是如果新元素不小于栈中最小值,将当前最小值复制一份再压入辅助栈。这两种方案都利用了两个栈来保持数据和最小值的同步,从而在常数时间内获取最小值。
摘要由CSDN通过智能技术生成

**

设计一个有getMin功能的栈

**

设计一个具有getMin()功能的栈:
1.push、pop、getMin()时间复杂度为O(1)
2.设计栈时可以使用现有的栈结构

一个栈本身有先进后出的顺序,要求当前的最小的值,又能实现pop弹出,则考虑用两个栈来实现。

方法一

class Stack1:
    def __init__(self,object=None) -> None:
        self.stack=[object]
        self.stack_min=[object]


    def push(self,x):
        self.stack.insert(0,x)
        if x<=self.stack_min(0) or self.stack_min(0)==None:
            self.stack_min.insert(0,x)
  
    
    def pop(self):
        x=self.stack.pop(0)
        if x==self.stack_min(0):
            self.stack_min.pop(0)
        return x    
        
    
    def getMin(self):
        return self.stack_min(0)

方法二

class Stack2:
    def __init__(self,object=None) -> None:
        self.stack=[object]
        self.stack_min=[object]


    def push(self,x):
        self.stack.insert(0,x)
        if x<self.stack_min(0) or self.stack_min(0)==None:
            self.stack_min.insert(0,x)
        else:
            flag=self.stack_min(0)
            self.stack_min.insert(0,flag)
  
    
    def pop(self):
        x=self.stack.pop(0)
        self.stack_min.pop(0)
        return x
        
    
    def getMin(self):
        return self.stack_min(0)

开始刷题,不能废了自己的双手

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值