資料流中的中位數

2021-09-10 13:38:52 字數 635 閱讀 3008

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

用錐來存放元素,將較小的元素存放在大頂錐中,錐頂為最大值;將較大元素存放在小頂錐中,錐頂為最小值。插入元素時,一直保持兩個錐元素個數相等或者大頂錐中元素個數比小頂錐多乙個。如果最終兩錐中元素個數相等,錐頂元素之和的平均數為中位數,如果大頂錐中元素個數比小頂錐多乙個,大頂錐錐頂元素為中位數。

class solution 

if(big.

size()

+1==sma.

size()

)//奇數個元素,大頂錐元素比小頂錐多乙個

}double

getmedian()

};

簡單粗暴,直接放到容器中排序取中間值

class solution 

double

getmedian()

private:

vector<

int>vec;

};

資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。簡單題 找中位數 coding utf 8 class solution x def insert self,nu...