【LeetCode】Day27-最小栈

题目

155. 最小栈【简单】

题解

一开始错误的点:用一个整型变量min记录栈中最小值,每次入栈的时候更新,错误原因是如果当前min出栈了,那么最小值该怎么更新?还得重新从栈里找

解决方法:既然用一个变量记录最小值行不通,那我们就用一组变量,即一个栈来记录最小值

  • 每个元素入栈的时候都记录下 当前元素 和 最小值栈min_stack栈顶(即之前最小的元素) 谁更小,更小的元素进入最小值栈
  • 元素出栈的时候,最小值栈也出栈

简单来说,最小值栈min_stack记录的就是当前元素及其之前的元素中的最小值 和 这个元素 的一种对应

class MinStack {
    private Stack<Integer>stack;
    private Stack<Integer>min_stack;//最小值栈
    public MinStack() {
        stack=new Stack<>();
        min_stack=new Stack<>();
        min_stack.push(Integer.MAX_VALUE);//注意看java中无穷大怎么表示
    }
    
    public void push(int val) {
        stack.push(val);
        min_stack.push(Math.min(val,min_stack.peek()));
    }
    
    public void pop() {
        stack.pop();
        min_stack.pop();//最小值栈一同出栈
    }
    
    public int top() {
        return stack.peek();//java中返回栈顶的操作是peek()
    }
    
    public int getMin() {
        return min_stack.peek();
    }
}

时间复杂度: O ( 1 ) O(1) O(1)

空间复杂度: O ( n ) O(n) O(n)

p.s. 最近在准备论文分享,时间有点紧,就刷道水题来打卡了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值