295. Find Median from Data Stream
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2Last updated
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2Last updated
class MedianFinder {
private Queue<Integer> minQ = new PriorityQueue<>();
private Queue<Integer> maxQ = new PriorityQueue<>();
/** initialize your data structure here. */
public MedianFinder() {
}
public void addNum(int num) {
maxQ.add(num);
minQ.add(-maxQ.poll());
if (maxQ.size() < minQ.size()) maxQ.add(-minQ.poll());
}
public double findMedian() {
return maxQ.size() > minQ.size() ? maxQ.peek() : (maxQ.peek() - minQ.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();
*/