zoukankan      html  css  js  c++  java
  • 牛客网 剑指Offer JZ20 包含min函数的栈

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)
    push(value):将value压入栈中
    pop():弹出栈顶元素
    top():获取栈顶元素
    min():获取栈中最小元素
     
    示例:
    输入:    ["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]
    输出:    -1,2,1,-1
    解析:
    "PSH-1"表示将-1压入栈中,栈中元素为-1
    "PSH2"表示将2压入栈中,栈中元素为2,-1
    “MIN”表示获取此时栈中最小元素==>返回-1
    "TOP"表示获取栈顶元素==>返回2
    "POP"表示弹出栈顶元素,弹出2,栈中元素为-1
    "PSH-1"表示将1压入栈中,栈中元素为1,-1
    "TOP"表示获取栈顶元素==>返回1
    “MIN”表示获取此时栈中最小元素==>返回-1
     
     
    class Solution:
        def __init__(self):
            self.stack = []  #初始化原栈
            self.stack_min = []  #初始化最小值栈
        def push(self, node):
            self.stack.append(node) #往原栈中添加 元素
            if not self.stack_min:    #一开始也往最小值栈中添加元素
                self.stack_min.append(node)
            elif node < self.stack_min[-1]:  #再次添加元素的时候要同最小值栈中元素比较,小于最小值栈中索引-1的对应值,就把node加入;
                self.stack_min.append(node)
            else:
                self.stack_min.append(self.stack_min[-1])  #否则把索引-1的对应值添加到stack_min中
        def pop(self):
            self.stack.pop()                    #弹出栈顶元素则分别获取即可
            self.stack_min.pop()
        def top(self):
            return self.stack[-1] 
        def min(self):
            return self.stack_min[-1] 
  • 相关阅读:
    shutil的一些基本用法
    python用random产生验证码,以及random的一些其他用法
    hashlib 文件校验,MD5动态加盐返回加密后字符
    python中logging日志基本用法,和进程安全问题
    用递归函数得到目录下的所有文件
    python装饰器
    列表推导式三种模式和生成器
    vue.js响应式原理解析与实现
    Promise详解
    三分钟教你同步 Visual Studio Code 设置
  • 原文地址:https://www.cnblogs.com/upstart/p/15222639.html
Copyright © 2011-2022 走看看