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

2021-10-21 06:24:25 字數 511 閱讀 8562

這題用小頂堆+大頂堆來做。維護乙個小頂堆,用來存放陣列中較大的那一部分,維護一大頂堆,用來存放陣列中較小的一部分。要始終保持小頂堆的最小值大於等於大頂堆的最大值也就是說小頂堆是儲存大一部分的值嘛,那麼大一部分的值中的最小值,都要大於較小部分的值的最大值。 然後就是兩個堆中元素數量相差為0,或者為1,不能》1

演算法步驟:

a小頂堆:維護大元素;b大頂堆:維護小元素

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 設計乙個支援以下兩種操作的資料結構 輸入...