Min Queue, 跟Min Stack类似, 实现一个Queue, 然后O(1)复杂度获得这个Queue里最小的元素。
////www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=193703&extra=page%3D1%26filter%3Dsortid%26sortid%3D311%26searchoption%5B3046%5D%5Bvalue%5D%3D2%26searchoption%5B3046%5D%5Btype%5D%3Dradio%26sortid%3D311
public class MinQueue {
Queue<Integer> queue;
// 我那个做法里需要反过来遍历Deque删除所有deque里比当前的x大的元素,queue不能反过来遍历
Deque<Integer> deque;
public MinQueue() {
queue = new LinkedList<Integer>();
deque = new ArrayDeque<Integer>();
}
public void offer(int x) {
if (queue.size() == 0) {
queue.offer(x);
deque.offer(x);
} else {
queue.offer(x);
for (Iterator<Integer> it = deque.descendingIterator(); it.hasNext();) {
if (it.next() > x) {
it.remove();
}
}
deque.offer(x);
}
}
public int remove() {
if (queue.size() == 0)
return -1;
int val = 0;
if (queue.peek() == deque.peek()) {
val = queue.remove();
deque.remove();
} else {
val = queue.remove();
}
return val;
}
public int getMin() {
return deque.getFirst();
}
}