在栈结构加一个返回最小值的方法。

原理是每一次push一个差值x-min,可以记录上一次的最小值。如果x小于上一次的min,就更改min。同时在pop的时候,要看栈顶是否是最小值,如果是,那么pop了以后就需要更新最小值为x+min。

public class MinStack {

Stack<Integer> stack;
int min;
/** initialize your data structure here. */
public MinStack() {
stack = new Stack<Integer>();
}

public void push(int x) {
if(stack.isEmpty()){
min = x;
stack.push(x - min);
}else{
stack.push(x - min);
if(min > x)
min = x;
}
}

public void pop() {
if(stack.isEmpty())
return;
int v = stack.pop();
if(v < 0)
min = min - v;
}

public int top() {
int top = stack.peek();
if(top < 0)
return min;
else
return top + min;
}

public int getMin() {
return min;
}
}