zoukankan      html  css  js  c++  java
  • 【Leetcode】155: 最小栈(Python)

    题目描述:

    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

    push(x) —— 将元素 x 推入栈中。
    pop() —— 删除栈顶的元素。
    top() —— 获取栈顶元素。
    getMin() —— 检索栈中的最小元素。
     

    示例:

    输入:
    ["MinStack","push","push","push","getMin","pop","top","getMin"]
    [[],[-2],[0],[-3],[],[],[],[]]

    输出:
    [null,null,null,null,-3,null,0,-2]

    解释:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin(); --> 返回 -3.
    minStack.pop();
    minStack.top(); --> 返回 0.
    minStack.getMin(); --> 返回 -2.
     

    提示:

    pop、top 和 getMin 操作总是在 非空栈 上调用。

    解题思路:

    利用辅助栈进行解答:

    什么是辅助栈?也就是一个用于装载所有最小数字的栈,如下图所示:

     由于时间复杂度只能够是常数时间o(1),因此我们在push的时候就可以把最小的数字放到min_stack里,而不是在min_stack函数里通过遍历,才去返回最小的数字,代码如下所示:

    import math
    class MinStack:
        def __init__(self):
            self.stack = []
            self.min_stack = [math.inf]
    
        def push(self, x: int) -> None:
            self.stack.append(x)
            self.min_stack.append(min(x, self.min_stack[-1]))
    
        def pop(self) -> None:
            self.stack.pop()
            self.min_stack.pop()
    
        def top(self) -> int:
            return self.stack[-1]
    
        def getMin(self) -> int:
            return self.min_stack[-1]
  • 相关阅读:
    HDU4474 Yet Another Multiple Problem BFS搜索
    HDU4473 Exam 数学分析
    2013ACM多校联合(4)
    POJ1273 网络流...
    HDU4472 Count 递推
    POJ1149 PIGS 网络流
    UVA10881 Piotr's Ants 想法题
    javascript js string.Format()收集
    修改 设置 vs.net 网站 调试 设为 起始页
    【转】HTML5杂谈 概念与现行游戏 割绳子 宝石迷阵
  • 原文地址:https://www.cnblogs.com/geeksongs/p/14124249.html
Copyright © 2011-2022 走看看