leetcode 295 資料流的中位數

2021-10-20 01:23:46 字數 984 閱讀 6274

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

例如,[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 範圍內,你將如何優化你的演算法?

基數排序的思想,使用長度101的int陣列記錄每個值的個數。

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

使用長度102的陣列。

採用大根堆(降序優先順序佇列)和小根堆(公升序優先順序佇列)存放數列,資料流向 左->右[->左]。

時間複雜度o(nlgn),空間複雜度o(n)。

class medianfinder 

public void addnum(int num)

}public double findmedian()

return (double)(maxheap.peek() + minheap.peek()) / 2;

}}/**

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

* medianfinder obj = new medianfinder();

* obj.addnum(num);

* double param_2 = obj.findmedian();

*/

size++放置的位置

LeetCode 295 資料流的中位數

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例 addnum 1 addnum 2 findmedian 1.5 addnum 3 findmedian 2...

LeetCode 295 資料流的中位數

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 void addnum int num 從資料流中新增乙個整數到資料結構中。double findmedian 返...

LeetCode 295 資料流的中位數

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 void addnum int num 從資料流中新增乙個整數到資料結構中。double findmedian 返...