classMedianFinder{private PriorityQueue<Integer> large;private PriorityQueue<Integer> small;/** initialize your data structure here. */publicMedianFinder(){// 小顶堆
large =newPriorityQueue<>();// 大顶堆
small =newPriorityQueue<>((a, b)->{return b - a;});}publicvoidaddNum(int num){if(small.size()>= large.size()){
small.offer(num);
large.offer(small.poll());}else{
large.offer(num);
small.offer(large.poll());}}publicdoublefindMedian(){// 总元素个数为偶数,两个堆的元素不一样多,多的那个堆的堆顶元素就是中位数if(large.size()< small.size()){return small.peek();}elseif(large.size()> small.size()){return large.peek();}// 总元素个数为奇数,两个堆的元素一样多,两个堆堆顶元素的平均数是中位数return(large.peek()+ small.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();
*/