每日leetcode 資料流的中位數

2021-09-24 13:35:16 字數 1202 閱讀 6293

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。

例如,[2,3,4] 的中位數是 3

[2,3] 的中位數是 (2 + 3) / 2 = 2.5

設計乙個支援以下兩種操作的資料結構:

void addnum(int num) - 從資料流中新增乙個整數到資料結構中。

double findmedian() - 返回目前所有元素的中位數。

示例:addnum(1)

addnum(2)

findmedian() -> 1.5

addnum(3)

findmedian() -> 2

高階:如果資料流中所有整數都在 0 到 100 範圍內,你將如何優化你的演算法?

如果資料流中 99% 的整數都在 0 到 100 範圍內,你將如何優化你的演算法?

常規思路:每插入乙個數進行一次排序,然後判斷裡邊的個數,直接取出中位數。當然超時了。

對於這道問題,設定兩個堆就好了,只不過這兩個堆,乙個是小頂堆,乙個大頂堆。

//大頂堆

priority_queue<

int,vector<

int>

,greater<

int>> minheap;

//小頂堆};

/** * your medianfinder object will be instantiated and called as such:

* medianfinder* obj = new medianfinder();

* obj->addnum(num);

* double param_2 = obj->findmedian();

*/

資料流中的中位數python 資料流中的中位數

python用的自己實現的最大和最小堆的class,getmedian需要加個引數,否則python版會報錯。coding utf 8 最小堆 class minheap def init self self.minheap def len self return len self.minheap ...

LeetCode 堆 資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例...

Leetcode 資料流的中位數

leetcode 中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 由於陣列是動態的,不斷會有新的資料加入,如果每次都進行重新排序會很麻煩,考慮能維持有序的結構,平衡的二叉搜尋樹 左節點的值 根節點 ...