Find Median from Data Stream
Design a data structure that supports the following two operations:
- void addNum(int num) - Add a integer number from the data stream to the data structure.
- double findMedian() - Return the median of all elements so far.
- Time: O(log(n)) Space: O(n)
class MedianFinder {
private Queue<Integer> small = new PriorityQueue<>(
Collections.reverseOrder());
private Queue<Integer> large = new PriorityQueue<>();
private boolean even = true;
public double findMedian() {
if (even)
return (small.peek() + large.peek()) / 2.0;
else
return small.peek();
}
public void addNum(int num) {
if (even) {
large.offer(num);
small.offer(large.poll());
} else {
small.offer(num);
large.offer(small.poll());
}
even = !even;
}
}