剑指OFFER——包含min函数的栈

在这里插入图片描述

算法思路:

1、采用两个栈:s1存储正常入栈顺序,s2存储最小值栈
2、当添加数入栈时,先正常入栈s1,然后再根据添加数判断选择值入栈s2:如果添加的数比最小栈栈顶的数小,则将添加数入最小栈, 如果添加的数比最小栈栈顶的数大,则添加最小数入最小栈(即最小栈栈顶元素再入栈)。整个过程中确保s1和s2栈中的个数相同


```java
public class Solution {

    //将存储正常入栈结果
    Stack<Integer> s1 = new Stack();
    //辅助栈,存储最小值,当要往栈中添加数时,将栈顶元素与添加的数比较,如果添加的数比较小,
    //则将添加的数入最小栈,如果栈顶的数字比较小,则添加最小栈栈顶的元素
    Stack<Integer>s2 = new Stack();
    
    public void push(int node) {
        s1.push(node);
        if(s2.isEmpty()){
            s2.push(node);
        }else{
            if(node<s2.peek()){
                s2.push(node);
            }else{
                s2.push(s2.peek());
            }
        }
    }
    
    public void pop() {
        if(!s1.isEmpty()){
            s1.pop();
            s2.pop();
        }
    }
    
    public int top() {
        if(!s1.isEmpty()){
            return s1.peek();
        }
        return -1;
    }
    
    public int min() {
        if(!s2.isEmpty()){
            return s2.peek();
        }
        return -1;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值