Google/LintCode:M-带最小值操作的栈

来源:互联网 发布:大奖章基金骗局知乎 编辑:程序博客网 时间:2024/06/05 00:24

题目


题目来源:Link


实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。

你实现的栈将支持pushpop 和 min 操作,所有操作要求都在O(1)时间内完成。

 注意事项

如果堆栈中没有数字则不能进行min方法的调用

样例

如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1


分析


维护两个栈,一个栈用于存数据,另一栈用于存对应数据 push 进来时的最小值


代码


public class MinStack {        Stack<Integer> s = new Stack<Integer>();    Stack<Integer> smin = new Stack<Integer>();    int min=Integer.MAX_VALUE;        public MinStack() {        // do initialize if necessary    }        public void push(int number) {        // write your code here        min = Math.min(min, number);        s.add(number);        smin.add(min);    }    public int pop() {        // write your code here        smin.pop();        if(smin.isEmpty()){            min=Integer.MAX_VALUE;        }else{            min=smin.peek();        }        return s.pop();    }    public int min() {        // write your code here        return smin.peek();    }}



原创粉丝点击