295. Find Median from Data Stream

1、題目數據結構

  一、審題spa

  

  二、分析code

    實現一個數據結構,能夠添加整形元素,並能夠返回排序後的中位數。blog

 

2、解答排序

  一、思路it

    採用兩個 PriorityQueue。io

    ①、採用兩個 PriorityQueue,PriorityQueue 具備對元素進行自動排序的功能。class

    ②、一個爲 maxQueue,記錄比中位數大的全部元素,另外一個爲 smallQueue, 記錄比中位數小的元素。im

    ③、爲了方便統計數中位數,smallQueue 中存儲的元素爲其負值,這樣,候補中位數就在 smallQueue 的隊頭。統計

    ④、若元素總數爲奇數,直接返回 largeQueue 的隊頭,若元素爲偶數,返回 largeQueue 的隊頭和 smallQueue 隊頭的負值,兩元素的平均。

public class MedianFinder {
    
    /** initialize your data structure here. */
    private Queue<Long> small = new PriorityQueue<Long>();
    private Queue<Long> large = new PriorityQueue<>();
    
    public void addNum(int num) {
        large.add((long) num);
        small.add(-large.poll());
        if(large.size() < small.size())
            large.add(-small.poll());
    }
    
    public double findMedian() {

        if(large.size() > small.size())
            return large.peek();
        
        return (large.peek() - small.peek()) / 2.0;
    }
}
相關文章
相關標籤/搜索