package pers.lyt.java;
import java.util.Comparator;
import java.util.PriorityQueue;
public class Offer41_StreamMedian {
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(11, new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
public void Insert(Integer num) {
if (((minHeap.size() + maxHeap.size()) & 1) == 0) {
if (!maxHeap.isEmpty() && maxHeap.peek() > num) {
maxHeap.offer(num);
num = maxHeap.poll();
}
minHeap.offer(num);
} else {
if (!minHeap.isEmpty() && minHeap.peek() < num) {
minHeap.offer(num);
num = minHeap.poll();
}
maxHeap.offer(num);
}
}
public Double GetMedian() {
if ((minHeap.size() + maxHeap.size()) == 0)
throw new RuntimeException();
double median;
if ((minHeap.size() + maxHeap.size() & 1) == 0) {
median = (maxHeap.peek() + minHeap.peek()) / 2.0;
} else {
median = minHeap.peek();
}
return median;
}
}