标签:interview
Question:
Design a max stack using one stack. ?
One stack? I think it is two stacks.
class MaxMinStack<T>
{
private Stack<T> data;
private Stack<T> max;
private Stack<T> min;
private Comparator<T> comparator;
public MaxMinStack<T>(Comparator comparator)
{
Validate.notNull(comparator);
data = new Stack<>();
min = new Stack<>();
max = new Stack<>();
this.comparator = comparator;
}
public void push(T t)
{
Validate.notNull(t);
data.push(t);
if (max.empty() || comparator.compare(t, max.peek()) >= 0)
{
max.push(t);
}
if (min.empty() || comparator.compare(t, min.peek()) <= 0)
{
min.push(t);
}
}
public T pop()
{
if (data.empty())
return null;
T t = data.pop();
if (comparator.compare(t, max.peek()) == 0)
max.pop();
if (comparator.compare(t, max.peek()) == 0)
min.pop();
return t;
}
public T max()
{
return max.empty() ? null : max.peek();
}
public T min()
{
return min.empty() ? null : min.peek();
}
}标签:interview
原文地址:http://7371901.blog.51cto.com/7361901/1604694