1 public class MedianFinder {
 2     private PriorityQueue<Integer> maxQueue;
 3     private PriorityQueue<Integer> minQueue;
 4     
 5     public MedianFinder() {
 6         maxQueue = new PriorityQueue<>(Collections.reverseOrder());
 7         minQueue = new PriorityQueue<>();
 8     }
 9 
10     // Adds a number into the data structure.
11     public void addNum(int num) {
12         maxQueue.offer(num);
13         minQueue.offer(maxQueue.poll());
14         if (maxQueue.size() < minQueue.size()) {
15             maxQueue.offer(minQueue.poll());
16         }
17     }
18 
19     // Returns the median of current data stream
20     public double findMedian() {
21         if (maxQueue.size() != minQueue.size()) {
22             return maxQueue.peek();
23         }
24         return (double)(maxQueue.peek() + minQueue.peek()) / 2.0;
25     }
26 };
27 
28 // Your MedianFinder object will be instantiated and called as such:
29 // MedianFinder mf = new MedianFinder();
30 // mf.addNum(1);
31 // mf.findMedian();

 

posted on 2016-07-06 07:40  keepshuatishuati  阅读(151)  评论(0编辑  收藏  举报