LintCode:带最小值操作的栈

描述:

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

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

样例:

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

分析:

利用两个栈来操作,一个用于存储数据,一个辅助栈用于存储最小值。

实现:

public class MinStack {
    Stack<Integer> s1=new Stack<>();
	Stack<Integer> s2=new Stack<>();

    public void push(int number) {
        s1.push(number);
        if(s2.isEmpty() || number<=s2.peek()){
        	s2.push(number);
        }
    }

    public int pop() {
        if(s1.peek().equals(s2.peek())){
    		s2.pop();
    	}
        return s1.pop();
    }

    public int min() {
    	return s2.peek();
    }
}

猜你喜欢

转载自blog.csdn.net/karute/article/details/80118429