From 2ec45fe5b82d713df47c53d14a640b83eb01f41c Mon Sep 17 00:00:00 2001 From: priyank-sriv Date: Sun, 24 Nov 2019 00:27:53 +0530 Subject: [PATCH] init --- .../datastreammedian/DataStreamMedian.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/datastreammedian/DataStreamMedian.java diff --git a/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/datastreammedian/DataStreamMedian.java b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/datastreammedian/DataStreamMedian.java new file mode 100644 index 0000000000..64f78227d5 --- /dev/null +++ b/algorithms-miscellaneous-5/src/main/java/com/baeldung/algorithms/datastreammedian/DataStreamMedian.java @@ -0,0 +1,35 @@ +package com.baeldung.algorithms.datastreammedian; + +import java.util.PriorityQueue; +import java.util.Queue; + +import static java.util.Comparator.reverseOrder; + +public class DataStreamMedian { + + private Queue minHeap, maxHeap; + + DataStreamMedian() { + minHeap = new PriorityQueue<>(); + maxHeap = new PriorityQueue<>(reverseOrder()); + } + + void add(int num) { + minHeap.offer(num); + maxHeap.offer(minHeap.poll()); + + if (minHeap.size() < maxHeap.size()) { + minHeap.offer(maxHeap.poll()); + } + } + + double getMedian() { + int median; + if (minHeap.size() > maxHeap.size()) { + median = minHeap.peek(); + } else { + median = (minHeap.peek() + maxHeap.peek()) / 2; + } + return median; + } +}