废话不多说,直接上代码。此处借用了Integer代替任意的泛型,这是因为在Java中任意的泛型定义的两个对象之前是不能直接用<、>等去比较的。非要这么设计,失去一般性,也没有了意思。
一个数据栈和一个辅助栈实现了一个包含min函数的栈:如下
package sword.to.offer;
import java.util.Stack;
public class StaticWithMIN{
Stack<Integer> mData = new Stack<Integer>();
Stack<Integer> mMin = new Stack<Integer>();
public void push(Integer value){
mData.push(value);
if(mMin.isEmpty()||value<mMin.peek()){
mMin.push(value);
}else {
mMin.push(mMin.peek());
}
}
public void pop() {
if(mData.size()>0&&mMin.size()>0){
mData.pop();
mMin.pop();
}
}
public Integer min() {
if(mData.size()>0&&mMin.size()>0)
return mMin.peek();
return null;
}
public static void main(String[] args) {
StaticWithMIN mStack = new StaticWithMIN();
mStack.push(Integer.valueOf(1));
mStack.push(Integer.valueOf(3));
mStack.push(Integer.valueOf(2));
mStack.pop();
mStack.pop();
mStack.pop();
System.out.println(mStack.min());
System.out.println(mStack.min());
}
}