41題資料流中的中位數

2021-10-01 16:39:35 字數 822 閱讀 3254

題目描述:

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

思路:使用最小堆和最大堆實現

vectormin;

vectormax;

加入最小堆:push_heap(min.begin(), min.end(), greater());

加入最大堆:push_heap(max.begin(), max.end(), less());

(乙個vector的push_back,對應乙個push_heap)

(&的優先順序低於==)

class

solution

max.

push_back

(num)

;push_heap

(max.

begin()

, max.

end(

), less<

int>()

);}else

min.

push_back

(num)

;push_heap

(min.

begin()

, min.

end(

), greater<

int>()

);}}

double

getmedian()

else}}

;

41 資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

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