剑指 Offer 30. 包含min函数的栈

1.思路:设置两个栈A和B,A存储所有元素,B存储的是小于等于A入栈的第一个元素,且按非递增顺序排列,这就保证了B的栈顶元素是最小元素
2.代码:
class MinStack {

    Stack<Integer>A;
    Stack<Integer>B;
    /** initialize your data structure here. */
    public MinStack() {
         A = new Stack();
         B = new Stack();
    }
    
    public void push(int x) {
        A.add(x);
        //如果B为空或者当前元素小于等于B的栈顶元素,则将元素入栈
        if(B.isEmpty() || x <= B.peek())
        B.add(x);
    }
    
    //将A的元素出栈,同时,若该元素与B的栈顶元素相等,将B的栈顶元素也出栈,因为B存储的是小于等于A入栈的第一个元素,且按非递增顺序排列,这就保证了B的栈顶元素是最小元素
    public void pop() {
        if(A.pop().equals(B.peek())){
            B.pop();
        }
    }
    
    //求栈顶元素
    public int top() {
       return A.peek();
    }
    
    public int min() {
       return B.peek();
    }
}
3.复杂度分析:时间空间都为o(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值