题解 | #数据流中的中位数#
数据流中的中位数
https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1
import java.util.*;
public class Solution {
private PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1,o2)->o2.compareTo(o1));//这是大根堆 用于存小的数
private PriorityQueue<Integer> minHeap = new
PriorityQueue(); //这是小根堆 用于存大的数
public void
modifyHeap() { //谁元素多 则谁出堆然后把元素加入到元素少的堆里面
if (this.maxHeap.size() - this.minHeap.size() > 1) {
this.minHeap.offer(this.maxHeap.poll());
}
if (this.minHeap.size() - this.maxHeap.size() > 1) {
this.maxHeap.offer(this.minHeap.poll());
}
}
public void Insert(Integer num) {
//小元素进入大根堆
if (!maxHeap.isEmpty() && num <= maxHeap.peek()) {
maxHeap.offer(num);
}
//大元素进入小根堆
else {
minHeap.offer(num);
}
//然后进行调整 如果一个堆比另一个堆的长度超过两个及以上 则调整
modifyHeap();
}
public Double GetMedian() {
double mid = 0;
if (this.maxHeap.size() > this.minHeap.size()) {
mid = (double)this.maxHeap.peek();
} else if (this.maxHeap.size() < this.minHeap.size()) {
mid = (double)this.minHeap.peek();
} else {
mid = (double)(this.minHeap.peek() + this.maxHeap.peek()) / 2;
}
//System.out.print(mid+" ");
return mid;
}
}

查看4道真题和解析
