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;
    }
}

results matching ""

    No results matching ""