Find Median from Data Stream
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2class MedianFinder {
//大小堆,2个都装,小的装负数,始终保持大堆大一点。
/** initialize your data structure here. */
Queue<Long> max;
Queue<Long> min;
public MedianFinder() {
max = new PriorityQueue<>();
min = new PriorityQueue<>();
}
public void addNum(int num) {
max.offer((long)num);
min.offer(-max.poll());
if(max.size() < min.size()){
max.offer(-min.poll());
}
}
public double findMedian() {
if(max.size() > min.size()){
return max.peek();
}else{
return (max.peek() - min.peek()) / 2.0; //2.0啊这里!!!!!
}
}
}
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/Last updated