import java.util.Stack;
public class E30StackForMin<T extends Comparable<T>> {
//实现一个包含min函数的栈,push,pop,min操作的时间复杂度都为O(1)
//辅助栈顶始终保存当前栈高度对应的栈中最小值
private Stack<T> storeStack = new Stack<>();
private Stack<T> assistStack = new Stack<>();
public void push(T type){
storeStack.push(type);
if (assistStack.empty() || type.compareTo(assistStack.peek()) < 0)
assistStack.push(type);
else
assistStack.push(assistStack.peek());
}
public void pop(){
if (assistStack.empty() || storeStack.empty())
throw new IllegalArgumentException("Null Stack");
storeStack.pop();
assistStack.pop();
}
public T min(){
if (assistStack.empty() || storeStack.empty())
throw new IllegalArgumentException("Null Stack");
return assistStack.peek();
}
//测试用例
public static void main(String[] args){
E30StackForMin<Integer> stack = new E30StackForMin<>();
stack.push(1);
stack.push(0);
stack.push(3);
stack.pop();
stack.pop();
System.out.print(stack.min());
}
}
包含min函数的栈
最新推荐文章于 2022-09-15 11:36:19 发布