You are viewing a single comment's thread. Return to all comments →
public static PriorityQueue<int, int> MinHeap = new PriorityQueue<int, int>(); public static PriorityQueue<int, int> MaxHeap = new PriorityQueue<int, int>(new IMaxCompareTo() ); public static List<string> runningMedian(List<int> inputData) { double median = 0; List<string> medians = new List<string>(); for (int i = 0; i < inputData.Count; i++) { int currentValue = inputData[i]; if (MaxHeap.Count == 0 || currentValue <= MaxHeap.Peek()) { MaxHeap.Enqueue(currentValue, currentValue); } else { MinHeap.Enqueue(currentValue, currentValue); } if ((MinHeap.Count - MaxHeap.Count) >= 2) { MaxHeap.Enqueue(MinHeap.Peek(), MinHeap.Peek()); MinHeap.Dequeue(); } else if ((MaxHeap.Count-MinHeap.Count)>=2) { MinHeap.Enqueue(MaxHeap.Peek(), MaxHeap.Peek()); MaxHeap.Dequeue(); } if (MinHeap.Count == MaxHeap.Count) { median = (double)(MinHeap.Peek() + MaxHeap.Peek()) / 2; } else if (MinHeap.Count > MaxHeap.Count) { median = MinHeap.Peek(); } else { median = MaxHeap.Peek(); } var stringM = median.ToString("0.0"); medians.Add(stringM); } return medians; } public class IMaxCompareTo: IComparer<int> { public int Compare(int x, int y) => y.CompareTo(x); }
Seems like cookies are disabled on this browser, please enable them to open this website
Find the Running Median
You are viewing a single comment's thread. Return to all comments →