package com.interview.books.ccinterview; import java.util.Comparator; import java.util.PriorityQueue; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 7/1/14 * Time: 1:17 PM * * Numbers are randomly generated and stored in an array. How would you keep track of the median. * */ public class CC36_TrackingMedian { int median = 0; int size = 0; Comparator<Integer> maxComparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }; PriorityQueue<Integer> rightMinHeap = new PriorityQueue<Integer>(10); PriorityQueue<Integer> leftMaxHeap = new PriorityQueue<Integer>(10, maxComparator); public void add(int number){ if(size == 0) median = number; else { if(number < median){ //put in left max heap if(rightMinHeap.size() - leftMaxHeap.size() >= 0){ leftMaxHeap.add(number); } else { rightMinHeap.add(median); median = number; } } else { if(leftMaxHeap.size() - rightMinHeap.size() >= 0){ rightMinHeap.add(number); } else { leftMaxHeap.add(median); median = number; } } } size++; } public int median(){ return median; } public static void main(String[] args){ CC36_TrackingMedian tracker = new CC36_TrackingMedian(); tracker.add(1); System.out.println(tracker.median()); //1 tracker.add(10); System.out.println(tracker.median()); //1 tracker.add(5); System.out.println(tracker.median()); //5 tracker.add(2); tracker.add(3); //1,2,3,5,10 System.out.println(tracker.median()); //3 } }