AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 155. Min Stack    原题链接    简单

作者: 作者的头像   jzcheng ,  2018-08-16 02:28:34 ,  所有人可见 ,  阅读 1390


2


题目描述

题目描述
请设计一个栈结构,支持 push、pop、top以及getMin操作,且每个操作的时间复杂度都是 O(1)O(1)。

push(x) – 向栈中压入元素 xx;
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.

算法

(栈) $O(1)$

这个方法只用了一个栈,并使用了一个常数min来记录当前最小值。当push的值x小于当前的最小值min,将min和x先后push,并更新当前的min = x; 当pop的值等于当前最小值min,进行两次pop操作,并更新当前最小值。

时间复杂度分析:四种操作都是O(1)时间的常数项入栈出栈操作;

JAVA 代码

class MinStack {

    Stack<Integer> stk = new Stack<Integer>();
    int min = Integer.MAX_VALUE;
    /** initialize your data structure here. */
    public MinStack() {

    }

    public void push(int x) {
        // 当 x 小于当前最小值 min, 将 min 和 x 先后push到stack里, 并更新此时的最小值 min = x
        if (x <= min) {
            stk.push(min);
            min = x;
        }
        stk.push(x);

    }

    public void pop() {
        // 当pop的值等于当前最小值 min, 多进行一次pop操作,并更新此时的最小值
        if (stk.pop() == min)
            min = stk.pop();
    }

    public int top() {
        return stk.peek();

    }

    public int getMin() {
        return min;

    }
}


7 评论


用户头像
小雨   2018-08-18 05:06         踩      回复

感觉理解起来还要绕一点点,如果空间开销没有省下来的话,还是两个栈比较好,这个方法确实巧妙


用户头像
小雨   2018-08-18 05:03         踩      回复

厉害了,一开始没有仔细看, 现在仔细看了下,只用了一个栈, 不过我的问题是,空间复杂度会不会跟用两个栈差不多啊?


用户头像
小雨   2018-08-18 04:30         踩      回复

厉害啊!棒!!!


用户头像
yxc   2018-08-17 11:23         踩      回复

赞!👍


用户头像
CunNH3   2018-08-16 22:27         踩      回复

pop函数中,最小值是怎么更新的?按照例子,此时pop两次,最小值还是-3,-2还在底下呢?

用户头像
jzcheng   2018-08-16 23:02         踩      回复

在这个例子里, 第一次pop之前 stack 中的数分别为 -2 0 -2 -3 此时 min = -3 , 进行pop 操作时,连续pop 两次,stack 为 -2 0 ,此时的min = -2.

用户头像
CunNH3   2018-08-17 13:59    回复了 jzcheng 的评论         踩      回复

谢谢!对上面的push没理解好


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息