題目
描述
實現(xiàn)一個帶有取最小值min方法的棧蠕嫁,min方法將返回當(dāng)前棧中的最小值。
你實現(xiàn)的棧將支持push
毯盈,pop
和 min
操作剃毒,所有操作要求都在O(1)時間內(nèi)完成。
樣例
如下操作:push(1)
搂赋,pop()
赘阀,push(2)
,push(3)
脑奠,min()
基公, push(1)
,min()
返回 1宋欺,2轰豆,1
解答
思路
建立兩個棧胰伍,一個保持頂端是最小的數(shù),另一個保存剩下的數(shù)據(jù)秒咨。
代碼
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();
}
}