• 牛客网 剑指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] 
  • 相关阅读:
    POJ3186(KB12-O DP)
    POJ1661(KB12-M DP)
    POJ2533(KB12-N LIS)
    POJ1458(KB12-L LCS)
    HDU1160(KB12-J DP)
    HDU1260(KB12-H DP)
    HDU1114(KB12-F DP)
    HDU1024(DP)
    HDU1074(KB12-D 状态压缩dp)
    天梯赛2016-L2
  • 原文地址:https://www.cnblogs.com/upstart/p/15222639.html
Copyright © 2020-2023  润新知