java 优先级队列示例(查找中位数)2017-06-19

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 优先级队列示例(查找中位数)2017-06-19相关的知识,希望对你有一定的参考价值。

package bearcola.queue.priorityqueue;

import java.util.PriorityQueue;

public class FindMedian {

	public static void main(String[] args) {
		MidTracker midTrack = new MidTracker();
		
		for (int i=1; i<=5; i++) {
			midTrack.read(i);
		}
		
		for (int item: midTrack.maxQ) {
			System.out.println(item);
		}
		
		for (int item: midTrack.minQ) {
			System.out.println(item);
		}
		
		System.out.println(midTrack.median());
	}
}

class MidTracker {
	PriorityQueue<Integer> minQ;
	PriorityQueue<Integer> maxQ;

	public MidTracker() {
		minQ = new PriorityQueue<Integer>();
		maxQ = new PriorityQueue<Integer>();
	}
	
	public void read(int num) {
		if (maxQ.size() == minQ.size()) {
			if (minQ.isEmpty() == false && num > minQ.peek()) {
				maxQ.offer(-minQ.poll());
			} else {
				maxQ.offer(-num);
			}
		} else {
			if (num < maxQ.peek()) {
				minQ.offer(-maxQ.poll());
				maxQ.offer(-num);
			} else {
				minQ.offer(num);
			}
		}
	}
	
	public double median() {
		if (maxQ.isEmpty()) {
			return -1; 
		}
		if (maxQ.size() == minQ.size()) {
			return (minQ.peek() - maxQ.peek()) / 2.0; 
		} else {
			return -maxQ.peek();
		}
	}
}

以上是关于java 优先级队列示例(查找中位数)2017-06-19的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 295. 数据流的中位数(优先队列,Java)

java 优先级队列示例2017-06-19

Java优先队列(PriorityQueue)示例

中位数 (优先队列)

使用广度优先搜素查找路径

中位数( 优先队列较优处理 )