劍指 Offer 41 資料流中的中位數

2021-10-16 16:11:53 字數 1002 閱讀 8938

劍指 offer 41. 資料流中的中位數

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

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

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

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

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

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

輸入:

["medianfinder","addnum","addnum","findmedian","addnum","findmedian"]

[,[1],[2],,[3],]

輸出:[null,null,null,1.50000,null,2.00000]

輸入:["medianfinder","addnum","findmedian","addnum","findmedian"]

[,[2],,[3],]

輸出:[null,null,2.00000,null,2.50000]

限制:

既然會呼叫多次,所以每次都進行排序是行不通的,用優先佇列priorityqueue也是行不通的,因為優先佇列沒有提供對應的介面讓我們直接通過下標訪問,所以這道題需要自己用陣列實現乙個最小堆?

原來是用乙個最小堆,乙個最大堆。。。。。。。

這個題最好是自己寫一遍最小堆。。

class

medianfinder

public

void

addnum

(int num)

else

}public

double

findmedian()

}

劍指 Offer 41 資料流中的中位數

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

《劍指offer》 41 資料流中的中位數

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

劍指Offer41 資料流中的中位數

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