import java.util.Comparator;
import java.util.PriorityQueue;
public class E41MedianOfDynamicArray<T extends Number> {
//最小优先队列及最大优先队列
private PriorityQueue<T> min = new PriorityQueue<>();
private PriorityQueue<T> max = new PriorityQueue(Comparator.reverseOrder());
public void insert(T number){
//插入数字
if (((min.size() + max.size()) & 0x1) == 0){
//如果总个数为偶数
min.offer(number);
if (min.size() != 0)
max.offer(min.poll());
}
else{
//如果总个数是奇数
max.offer(number);
if (max.size() != 0)
min.offer(max.poll());
}
}
public double getMedian(){
if (max.size() + min.size() == 0)
throw new IllegalArgumentException("No Number Available!");
if (((min.size() + max.size()) & 0x1) == 0)
return (max.peek().doubleValue() + min.peek().doubleValue()) / 2;
else
return max.peek().doubleValue();
}
//测试用例
public static void main(String[] args){
E41MedianOfDynamicArray<Integer> median = new E41MedianOfDynamicArray<>();
for (int i = 1; i <= 12; i ++)
median.insert(i);
System.out.println(median.getMedian());
}
}
数据流中的中位数(Java实现)
最新推荐文章于 2021-11-21 14:41:45 发布
本文介绍了如何使用Java来实现在数据流中动态计算中位数的方法。通过维护一个最小堆和最大堆,确保在数据流不断更新的过程中,可以快速找到当前的中位数。这种方法既保证了效率,也确保了结果的准确性。
1213

被折叠的 条评论
为什么被折叠?



