剑指offer41——数据流中的中位数(Java版)

给定一个不知大小的数据流,求的其中位数(若数据量为基数,直接输出中位数;若数据量为偶数,输出中间两个数平均值)

使用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);
			}
		}
	}

猜你喜欢

转载自blog.csdn.net/better_girl/article/details/84786052