LintCode-----12.带最小值操作的栈

来源:互联网 发布:neu的数据分析 编辑:程序博客网 时间:2024/06/07 04:02

1.自写

这里有坑就是关于栈为空的情况应怎么操作,我觉得这是比较省空间的

/** * Created by XQF on 2017/8/13. */public class MinStack {    Stack<Integer> s1;    Stack<Integer> s2;    int min = Integer.MAX_VALUE;    public MinStack() {        s1 = new Stack<>();        s2 = new Stack<>();    }    public void push(int number) {        // write your code here        if (number < min) {            min = number;            s2.push(min);        }        s1.push(number);    }    public int pop() {        int temp = s1.pop();        if (temp == min) {            min = s2.pop();        }        return temp;    }    public int min() {        // write your code here        if (!s1.isEmpty()) {            return s2.peek();        }        return 0;    }    public static void main(String[] args) {        MinStack stack = new MinStack();        stack.push(2);        stack.push(1);        stack.push(9);        System.out.println(stack.min());        stack.pop();        System.out.println(stack.min());        stack.pop();        System.out.println(stack.min());    }}

2.九章

但是看代码也是没有判断使用min的时候是不是为空呀。

// version 1:public class MinStack {    private Stack<Integer> stack;    private Stack<Integer> minStack;    public MinStack() {        stack = new Stack<Integer>();        minStack = new Stack<Integer>();    }    public void push(int number) {        stack.push(number);        if (minStack.isEmpty()) {            minStack.push(number);        } else {            minStack.push(Math.min(number, minStack.peek()));        }    }    public int pop() {        minStack.pop();        return stack.pop();    }    public int min() {        return minStack.peek();    }}
原创粉丝点击