zoukankan      html  css  js  c++  java
  • 剑指 Offer 30. 包含min函数的栈(辅助栈)

    • 题目描述
    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
    
    
    示例:
    
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.min();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.min();   --> 返回 -2.
    • 题解

    push,pop,top都很好做到O(1),但是min的话不容易。这里可以考虑用辅助栈,一个栈正常push数据,另一个栈的栈顶始终保存当前最小的数。

    class MinStack:
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.items = []
            self.assItems = []
    
        def push(self, x: int) -> None:
            self.items.append(x)
            if not self.assItems:
                self.assItems.append(x)
            else:
                if self.assItems[-1] > x:
                    self.assItems.append(x)
                else:
                    self.assItems.append(self.assItems[-1])
    
        def pop(self) -> None:
            self.items.pop()
            self.assItems.pop()
    
        def top(self) -> int:
            return self.items[-1]
    
        def min(self) -> int:
            return self.assItems[-1] 
  • 相关阅读:
    【JAVA与C#比较】其它
    C#和java之间的一些差异与共性
    C#与Java的语法差异
    关于npm本地安装模块包(node_modules),安装不了的问题
    vue
    vue
    vue
    vue
    v
    vue -model
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13475796.html
Copyright © 2011-2022 走看看