• 155_最小栈


    最小栈

    题目

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

    • push(x) – 将元素 x 推入栈中。
    • pop() – 删除栈顶的元素。
    • top() – 获取栈顶元素。
    • getMin() – 检索栈中的最小元素。
      示例:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.
    

    思路

    这个题要求在常数时间内获得最小值,因此不能在getMin()的时候再去计算,应该在push的时候就计算了。

    可以用一个栈,这个栈保存的是每个数字进入栈的时候的(值与最小值)。速度很快。

    答案

    class MinStack(object):
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.stack = []
            
    
        def push(self, x):
            """
            :type x: int
            :rtype: void
            """
            if not self.stack:
                self.stack.append((x, x))
            else:
                self.stack.append((x, min(x, self.stack[-1][1])))
            
    
        def pop(self):
            """
            :rtype: void
            """
            self.stack.pop()
            
    
        def top(self):
            """
            :rtype: int
            """
            return self.stack[-1][0]
            
    
        def getMin(self):
            """
            :rtype: int
            """
            return self.stack[-1][1]
    
    欢迎,关注我的公众号 “DailyProgrammer”,每天8点为你推送精彩的技术文章!!!
  • 相关阅读:
    mac下安装mysql
    给一些研究生的忠告(转)
    git相关
    PC端网页rem适配方案
    使用es6,对两个数组进行对比,从而修改其中一个数组里的某些值
    uni-app自定义简单的下拉刷新
    vue监听对象里的某个属性
    vue项目文件的权限配置
    vuex的用法
    jsencrypt.js文件解压版
  • 原文地址:https://www.cnblogs.com/dailyprogrammer/p/12241631.html
Copyright © 2020-2023  润新知