https://leetcode.com/problems/find-median-from-data-stream/?tab=Description
找数据流中的中位数
大根堆存最小的一半,小根堆存最大的一半,大根堆小根堆-----》PriorityQueue
public class MedianFinder {
PriorityQueue<Integer> min;
PriorityQueue<Integer> max;
/** initialize your data structure here. */
public MedianFinder() {
min = new PriorityQueue<Integer>();
max = new PriorityQueue<Integer>(new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
}
public void addNum(int num) {
min.offer(num);
max.add(min.poll());
if (max.size() > min.size()) {
min.add(max.poll());
}
}
public double findMedian() {
if ((max.size() + min.size()) % 2 == 0) {
return (min.peek() + max.peek()) / 2.0;
} else {
return min.peek();
}
}
}
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/