zoukankan      html  css  js  c++  java
  • 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点为你推送精彩的技术文章!!!
  • 相关阅读:
    Java基础之抽象类和多态
    Java基础之继承重载重写与this和super
    Java基础之StringBuffer的使用
    Java基础之String的方法与常量池
    Spring Boot之JSP开发
    Spring Boot之thymeleaf中替换th:each使用
    本周进度
    问卷调查立题报告(三人行)
    本周进度(复习软考)
    软件需求十步走之阅读笔记02
  • 原文地址:https://www.cnblogs.com/dailyprogrammer/p/12241631.html
Copyright © 2011-2022 走看看