1. 程式人生 > >295. Find Median from Data Stream

295. Find Median from Data Stream

str 一個數 private 元素 用兩個 edi alt all rom

一、題目

  1、審題

  技術分享圖片

  2、分析

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

二、解答

  1、思路

    采用兩個 PriorityQueue。

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

    ②、一個為 maxQueue,記錄比中位數大的所有元素,另一個為 smallQueue, 記錄比中位數小的元素。

    ③、為了方便統計數中位數,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; } }

295. Find Median from Data Stream