题目
描述
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push
,pop
和 min
操作,所有操作要求都在O(1)时间内完成。
样例
如下操作:push(1)
,pop()
,push(2)
,push(3)
,min()
, push(1)
,min()
返回 1,2,1
解答
思路
建立两个栈,一个保持顶端是最小的数,另一个保存剩下的数据。
代码
public class MinStack {
private Stack<Integer> data;
private Stack<Integer> mins;
public MinStack() {
// do intialization if necessary
this.data = new Stack<Integer>();
this.mins = new Stack<Integer>();
}
/*
* @param number: An integer
* @return: nothing
*/
public void push(int number) {
// write your code here
data.add(number);
if(mins.empty() || mins.peek() >= number)
mins.add(number);
}
/*
* @return: An integer
*/
public int pop() {
// write your code here
int ret = data.pop();
if(ret == mins.peek())
mins.pop();
return ret;
}
/*
* @return: An integer
*/
public int min() {
// write your code here
return mins.peek();
}
}