最小栈问题
问题
定义栈数据结构,请在类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1)
class MinStack<T> {
private Stack main = new Stack<T>();
private Stack child = new Stack<T>();
Comparator<T> comparator;
public MinStack(Comparator<T> _comparator) {
comparator = _comparator;
}
public T pop() {
if (main.isEmpty())
throw new EmptyStackException();
else {
if (!child.isEmpty()
&& comparator.compare((T) main.peek(), (T) child.peek()) == 0)
child.pop();
return (T) main.pop();
}
}
public void push(T t) {
main.push(t);
if (child.isEmpty())
child.push(t);
else if (comparator.compare(t, (T) child.peek()) < 0)
child.push(t);
}
public T min() {
if (!child.isEmpty())
return (T) child.peek();
else
throw new EmptyStackException();
}
}