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] 
  • 相关阅读:
    Java equals()和hashCode()重写总结
    常见ORM框架理解
    struts2的第一个小页面
    Java开发StringBuilder类
    “中软综合项目实训”——把学生当员工培养
    中软寻梦
    软件开发学习的5大技巧
    从学生心理入手
    IT技术人员的职业发展方向
    驱动创新 引领未来
  • 原文地址:https://www.cnblogs.com/upstart/p/15222639.html
Copyright © 2011-2022 走看看