資料流中的中位數

2021-09-27 07:08:07 字數 704 閱讀 5140

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert()方法讀取資料流,使用getmedian()方法獲取當前讀取資料的中位數。

//方法1:利用快排

//插入o(nlogn) 取中位數o(1)

//如果將快排改為插入排序,時間複雜度變成o(n),這是因為每次待排序陣列都是近乎有序的

class solution

double getmedian()else

}private:

vectorvec;

};

//方法2:使用大頂堆和小頂堆輔助完成

//插入o(logn) 取中位數o(1)

//在資料總數是偶數時,在遇到新的數字時優先插入到最小堆,不過要注意下實現細節,具體見**

#include//判題系統沒有包含這個標頭檔案,所有手動新增上

class solution

pq.push(num);}}

double getmedian()else

}private:

priority_queuepq; //大堆

priority_queue,greater> pq2;

};

資料流中的中位數

資料流中的中位數 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。解題思路 維護乙個大堆和乙個小堆,大堆表示序列前一半數,小堆表示序列後一半數,保持兩個堆的元素個...

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。class solution double getmedian else private vectordata c...

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。簡單題 找中位數 coding utf 8 class solution x def insert self,nu...