【Leetcode】最小栈

来源:互联网 发布:报表类软件 编辑:程序博客网 时间:2024/06/08 08:36

在栈结构加一个返回最小值的方法。

原理是每一次push一个差值x-min,可以记录上一次的最小值。如果x小于上一次的min,就更改min。同时在pop的时候,要看栈顶是否是最小值,如果是,那么pop了以后就需要更新最小值为x+min。

public class MinStack {Stack<Integer> stack;int min;    /** initialize your data structure here. */    public MinStack() {        stack = new Stack<Integer>();    }        public void push(int x) {        if(stack.isEmpty()){        min = x;        stack.push(x - min);        }else{        stack.push(x - min);        if(min > x)        min = x;        }    }        public void pop() {    if(stack.isEmpty())    return;        int v = stack.pop();        if(v < 0)        min = min - v;    }        public int top() {        int top = stack.peek();        if(top < 0)        return min;        else        return top + min;    }        public int getMin() {        return min;    }}