首页 > 其他 > 详细

[leetcode/lintcode 题解] Google面试题:带最小值操作的栈

时间:2020-09-29 19:44:26      阅读:34      评论:0      收藏:0      [点我收藏+]
实现一个栈, 支持以下操作:
  • ?push(val)? 将 val 压入栈
  • ?pop()? 将栈顶元素弹出, 并返回这个弹出的元素
  • ?min()? 返回栈中元素的最小值
要求 O(1) 开销.
 
在线评测地址:领扣官网题库
 
样例:
输入: 
  push(1)
  min()
  push(2)
  min()
  push(3)
  min()
输出: 
  1
  1
  1
 
算法:最小栈
思路:
  • 要求O(1)时间内完成所有操作,压入栈弹和出栈顶元素并返回本来就是O(1)没有问题,要返回栈中元素最小值也是O(1)就需要一个辅助栈。
  • 在压入新元素时,如果辅助栈为空或者辅助栈顶元素大于新元素,那么新元素就是目前最小值,压入新元素;如果辅助栈顶元素小于新元素,那么再次压入栈顶元素。
  • 在弹出元素时,辅助栈跟着一起弹出栈顶元素。
  • 这样就满足了辅助栈内存储的最小值与存储数据的栈同步,查询最小值的操作是O(1)的。
复杂度:
  • 空间复杂度取决于输入的数据
  • 时间复杂度O(1)
 
public class MinStack {
 
    Stack<Integer> stack, minStack;
 
    public MinStack() {
        stack = new Stack<Integer>();
        minStack = new Stack<Integer>();
    }
 
    /*
     * @param number: An integer
     * @return: nothing
     */
    public void push(int number) {
        stack.push(number);
        if (minStack.empty() || number < minStack.peek()) {
            minStack.push(number);
        } else {
            minStack.push(minStack.peek());
        }
    }
 
    /*
     * @return: An integer
     */
    public int pop() {
        minStack.pop();
        return stack.pop();
    }
 
    /*
     * @return: An integer
     */
    public int min() {
        return minStack.peek();
    }
}
 
更多题解参考:九章官网solution

[leetcode/lintcode 题解] Google面试题:带最小值操作的栈

原文:https://www.cnblogs.com/lintcode/p/13750771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!