题解 | #包含min函数的栈#

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

import java.util.Stack;

public class Solution {
    // push 进行入栈操作的
    // top 需要返回栈顶元素
    // min 需要返回栈中最小元素
    // pop 弹出栈顶元素

    // 本身栈的操作pop和push,在stack1进行
    Stack<Integer> s1 = new Stack<>();
    // 最小值存在stack2里面,每次进入stack1的时候比较一下
    Stack<Integer> s2 = new Stack<>();


    
    public void push(int node) {
        // 新来的元素,直接在stack1进行入栈操作
        s1.push(node);
        // 对于stack2里面,是记录最小值的,
        // 空的时候,或者当前的node比s2里面的值小,把node也加入stack2
        if(s2.isEmpty() || s2.peek() > node){
            s2.push(node);
        }else{
            //当前的node比s2的元素大,就不管它,但是要保证s2和s1元素个数一致,就重复加入栈顶
            s2.push(s2.peek());
        }
    }
    
    public void pop() {
        s1.pop();
        // 弹出当前元素,对最小值也是有影响的
        // s1和s2的关系是,s2的元素是小于等于s1的
        s2.pop();
        
    }
    
    public int top() {
        return s1.peek();
    }
    
    public int min() {
        return s2.peek();
    }
}

主要还是理解Stack的几个常用方法。

push是入栈操作,pop是弹出栈顶并返回当前元素,peek是返回栈顶元素,isEmpty判断栈是不是空的

stack1就是正常的进栈出栈操作,个数与stack2对应,stack2是记录最小值的,空的时候直接进栈,node如果小于stack2的栈顶,进栈,否则,就把stack2的栈顶重复加入。

最小值就是stack2的peek,top就是stack1的peek。

全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务