package class34; import java.util.PriorityQueue; public class Problem_0295_FindMedianFromDataStream { class MedianFinder { private PriorityQueue maxh; private PriorityQueue minh; public MedianFinder() { maxh = new PriorityQueue<>((a, b) -> b - a); minh = new PriorityQueue<>((a, b) -> a - b); } public void addNum(int num) { if (maxh.isEmpty() || maxh.peek() >= num) { maxh.add(num); } else { minh.add(num); } balance(); } public double findMedian() { if (maxh.size() == minh.size()) { return (double) (maxh.peek() + minh.peek()) / 2; } else { return maxh.size() > minh.size() ? maxh.peek() : minh.peek(); } } private void balance() { if (Math.abs(maxh.size() - minh.size()) == 2) { if (maxh.size() > minh.size()) { minh.add(maxh.poll()); } else { maxh.add(minh.poll()); } } } } }