Mid Coding

Find the median of a data stream?

public class MedianFinder {

private PriorityQueue<int, int> maxHeap; // lower half (max

heap)

Follow on:

private PriorityQueue<int, int> minHeap; // upper half (min

heap)

public MedianFinder() {

maxHeap = new PriorityQueue<int,

int>(Comparer<int>.Create((a, b) => b.CompareTo(a)));

minHeap = new PriorityQueue<int, int>();

public void AddNum(int num) {

maxHeap.Enqueue(num, num);

minHeap.Enqueue(maxHeap.Dequeue(), maxHeap.Peek());

if (maxHeap.Count < minHeap.Count)

maxHeap.Enqueue(minHeap.Dequeue(), minHeap.Peek());

public double FindMedian() {

if (maxHeap.Count > minHeap.Count)

return maxHeap.Peek();

return (maxHeap.Peek() + minHeap.Peek()) / 2.0;

Explanation:

Maintain two heaps: maxHeap for lower half, minHeap for upper half. Balance their sizes.

More from C# Programming Tutorial

All questions for this course