java 通过最大堆和最小堆实现
数据流中的中位数
http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1
最小堆放较大的一半元素,
最大堆放较小的一半元素;
insert的时候先向最小堆放入(先放入最大堆,在交换至最小堆,可确保最小堆中的元素一直是较大的一半)
import java.util.*;
public class Solution {
// 最大堆
PriorityQueue<Integer> max = new PriorityQueue<>((o1,o2)-> o2-o1);
// 最小堆
PriorityQueue<Integer> min = new PriorityQueue<>();
// size
int size=0;
public void Insert(Integer num) {
size++;
// 先放入最小堆
if (size%2==1){
max.add(num);
min.add(max.poll());
// 在放入最大堆
}else {
min.add(num);
max.add(min.poll());
}
}
public Double GetMedian() {
//奇数
if ((size&1)==1){
System.out.println("奇数");
return new Double(min.peek());
}else {
return (min.peek()+max.peek())/2.0;
}
}
}

