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

包含min函数的栈

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

(1)辅助栈方法

使用两个栈维护数据,一个作为普通栈,一个保存历史最小值


public class Solution {
    //正常栈操作
    private Stack<Integer> stack = new Stack<Integer>();
    //保存最小值栈
    private Stack<Integer> mins = new Stack<Integer>();
    public void push(int node) {
         stack.push(node);
         //最小值栈为空或元素小于最小值栈顶元素则入栈
         if(mins.isEmpty() || node <= mins.peek())
             mins.push(node);
    }
    
    public void pop() {
    	//两个栈顶元素相同则最小值栈顶也需要弹出
         if(stack.peek().equals(mins.peek()))
             mins.pop();
         stack.pop();
    } 
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        return mins.peek();
    }
}

(2)记录最小值方法


public class Solution {
    //正常栈操作
    private Stack<Integer> stack = new Stack<Integer>();
    //保存最小值
    int min;
    public void push(int node) {
        if (stack.isEmpty()) {
            min = node;
            stack.push(node - min);
        } else {
        	//栈中存放node-当前最小值的结果
            stack.push(node - min);
            //更新最小值
            if (node > min) {
                min = node;
            }
        }
    }
    
    public void pop() {
        int tmp = stack.pop();
        if (tmp < 0) {
            //出栈时,如果栈顶值大于零,说明上一个最小值和当前一样,不需要变动;
            //如果小于零,则上一个最小值=当前最小值-栈顶值(因为栈顶值=node-min)
            min = min - tmp;
        }
    } 
    
    public int top() {
    	//栈顶小于0,最小值在该位置发生变化,目前最小值为该位置元素值
        if(stack.peek() < 0){
            return min;
        }
        //正常还原元素值
        else{
            return stack.peek() + min;
        }
    }
    
    public int min() {
        return min;
    }
}
全部评论
请问辅助栈解法pop()里面条件判断为什么用equals?不能直接用==判断吗
点赞 回复 分享
发布于 2022-03-04 00:24

相关推荐

牛大宝儿236:还没入职就PUA,[发火我之前遇到一个月给500块钱的
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务