package 数据流中的中位数;
import java.util.Comparator;
import java.util.PriorityQueue;
public class Solution {
private PriorityQueue<Integer> smallHeap = new PriorityQueue<Integer>();
private PriorityQueue<Integer> bigHeap = new PriorityQueue<Integer>(15, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
private int count=0;
public void Insert(Integer num) {
//bigHeap.add(num);
if(1 == count%2){
bigHeap.add(num);
smallHeap.add(bigHeap.poll());
} else {
//if count is even,then insert into bigHeap,but before you have to filter
smallHeap.add(num);
bigHeap.add(smallHeap.poll());
}
count++;
}
public Double GetMedian() {
if(count%2==1){
return new Double(bigHeap.peek());
} else {
//System.out.println(new Double((bigHeap.peek()) + new Double(smallHeap.peek())));
return new Double((bigHeap.peek()) + new Double(smallHeap.peek())) / 2 ;
}
}
public static void main(String[] args) {
Solution s = new Solution();
//s.Insert(3);
for(int i=0;i<6;i++){
s.Insert(i);
}
System.out.println(s.GetMedian().doubleValue());
}
}
数据流中的中位数
最新推荐文章于 2024-08-28 14:47:27 发布