index
title: 数据流中的中位数 date: 2019-08-21T11:00:41+08:00 draft: false categories: offer
题目
解题思路
private PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> -o1.compareTo(o2));
private PriorityQueue<Integer> minHeap = new PriorityQueue<>();
private int size = 0;
public void Insert(Integer num) {
if (size % 2 == 0) {
maxHeap.add(num);
if (minHeap.isEmpty() || num > minHeap.peek()) {
minHeap.add(maxHeap.poll());
}
} else {
minHeap.add(num);
if (maxHeap.isEmpty() || num < maxHeap.peek()) {
maxHeap.add(minHeap.poll());
}
}
size++;
}
public Double GetMedian() {
if (maxHeap.isEmpty() && minHeap.isEmpty()) return 0.0;
if (maxHeap.isEmpty()) return minHeap.peek() * 1.0;
if (minHeap.isEmpty()) return maxHeap.peek() * 1.0;
if (maxHeap.size() == minHeap.size()) {
return (maxHeap.peek() + minHeap.peek()) / 2.0;
}
return maxHeap.size() > minHeap.size() ? maxHeap.peek() * 1.0 : minHeap.peek() * 1.0;
}Last updated