java - 155.最小栈 和 常见的坑

1、题目

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

实现 MinStack 类:

- MinStack() 初始化堆栈对象。
- void push(int val) 将元素val推入堆栈。
- void pop() 删除堆栈顶部的元素。
- int top() 获取堆栈顶部的元素。
- int getMin() 获取堆栈中的最小元素。

2、解题思路

1、设置一个辅助栈,原始栈正常入栈和出栈,辅助栈始终存当前最小值

2、入栈:每次入栈都入原始栈,对于辅助栈,要判断当前元素和辅助栈的栈顶谁小,小的当栈顶

3、出栈:为了保证辅助栈始终是最小值,辅助栈也必须出栈,因为原始栈出栈伴随着最小元素的出栈,画图一目了然:

4、获取栈顶和最小值就相对简单,栈顶用原始栈,最小值用辅助栈

3、踩坑

1、public void MinStack() :注意这里,IDEA要加上void,提交力扣要去掉

2、出栈的时候,辅助栈也要出栈,因为原始栈出栈伴随着最小元素的出栈

4、代码实现

class Soution {
    private Stack<Integer> resultStack;
    private Stack<Integer> helpStack;


    public void MinStack() {
        // 注意这里,IDEA要加上void,提交力扣要去掉
        resultStack = new Stack<>();
        helpStack = new Stack<>();
    }

    public void push(int val) {
        // 原始栈正常入栈,辅助栈每次只入当前最小值
        resultStack.push(val);
        if (helpStack.isEmpty() || helpStack.peek() >= val){
            // 入栈元素<栈顶,就入该元素
            helpStack.push(val);
        }else {
            // 入栈元素>栈顶,就入栈顶元素
            helpStack.push(helpStack.peek());
        }

    }

    public void pop() {
        if (!resultStack.isEmpty()){
            resultStack.pop();
            // 辅助栈也必须出栈,因为原始栈出栈伴随着最小元素的出栈
            // 为了保证辅助栈始终是最小值,因此也相应出栈,画图一目了然
            helpStack.pop();
        }else {
            throw new RuntimeException("Stack is empty");
        }
    }

    public int top() {
        if (!resultStack.isEmpty()){
            return resultStack.peek();
        }
        throw new RuntimeException("Stack is empty");

    }

    public int getMin() {
        if (!helpStack.isEmpty()){
            return helpStack.peek();
        }
        throw new RuntimeException("Stack is empty");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值