class MedianFinder {
private PriorityQueue<Long> large;
private PriorityQueue<Long> small;
/** initialize your data structure here. */
public MedianFinder() {
large = new PriorityQueue<>();
small = new PriorityQueue<>();
}
public void addNum(int num) {
large.add((long)num);
small.add(-large.poll());
if (large.size() < small.size()) {
large.add(-small.poll());
}
}
public double findMedian() {
// notice divide by 2.0, or the presision lost
return (large.size() > small.size()) ? large.peek() : (large.peek() - small.peek())/2.0;
}
}
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/