给定一个不知大小的数据流,求的其中位数(若数据量为基数,直接输出中位数;若数据量为偶数,输出中间两个数平均值)
使用priorityQueue构建指定排序的两组数。
private PriorityQueue<Integer> max= new PriorityQueue<>(Collections.reverseOrder());
private PriorityQueue<Integer> min= new PriorityQueue<>();
private Integer getMedian() {
int size= max.size()+ min.size();
if(size== 0)
throw new RuntimeException("数据流为空!");
Integer Median= 0;
if((size& 1)==1) Median= min.peek();
else Median= (min.peek()+ max.peek())/2;
return Median;
}
private void adjustQueue(int[] nums) {
for(int i=0; i<nums.length; i++) {
Integer tmp= nums[i];
if(((min.size()+ max.size())&1)==0) {
if(max.size()>0 && tmp< max.peek()) {
max.offer(tmp);
tmp= max.poll();
}
min.offer(tmp);
}
else {
if(min.size()>0 && tmp> min.peek()) {
min.offer(tmp);
tmp= min.poll();
}
max.offer(tmp);
}
}
}