classMedianFinder { PriorityQueue<Integer> down, up; int cnt;
/** initialize your data structure here. */ publicMedianFinder() { down = newPriorityQueue<>((a, b) -> b - a); up = newPriorityQueue<>((a, b) -> a - b); cnt = 0; } publicvoidaddNum(int x) { if (down.isEmpty() || x <= down.peek()) down.add(x); else up.add(x); if (down.size() > up.size() + 1) up.add(down.poll()); if (up.size() > down.size()) down.add(up.poll()); cnt++; } publicdoublefindMedian() { if ((cnt&1) == 1) return down.peek(); return (down.peek() + up.peek()) / 2.0; } }
/** * Your MedianFinder object will be instantiated and called as such: * MedianFinder obj = new MedianFinder(); * obj.addNum(num); * double param_2 = obj.findMedian(); */