如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert()方法讀取資料流,使用getmedian()方法獲取當前讀取資料的中位數。
解讀,有乙個會不斷增長的資料,一直在新增新的數。需要求的每次新加數後,求整體的中位數(從第乙個數開始到新的數)
例如輸入 1
中位數 1
再輸入 2
中位數 1.5
再輸入 3
中位數 2
再輸入 0
中位數 0.5
class
solution
else
if(num > p.
top())
//如果新的數比 前半部分中最大值還大,那麼就將其加入後半部分
else
if(p.
size()
== q.
size()
+2)//如果連續多個(平衡後兩個)數都加入了前半部分,那就取前半部分的堆頂,放入後半部分
else
if(p.
size()
== q.
size()
-1)//如果連續多個數都加入了後半部分,那就取後半部分的堆頂,放入前半部分。這個例子中,設定前僅半部分可以比後半多乙個,所以當後半多1個的時候就放入前半
}//獲取當前平均值
double
getmedian()
};
資料流的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert 方法讀取資料流,使用getmedian 方法獲取當前讀取資料的中位數。coding utf ...
資料流的中位數
資料流的中位數 中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例 addnum 1 addnum 2 findmedian 1.5 addnum 3 find...
資料流的中位數
問題定義 不斷有數字過來,問在當前所有數字中的中位數是多少 優先佇列 堆 我們可以用乙個大根堆和乙個小根堆分別維護乙個有序數,使得小根堆的所有數字都大於大根堆,這就要求小根堆的堆頂要大於等於大根堆的堆頂。為了求得中位數,我們需要小根堆和大根堆的數字個數相等或相差一。我們可以用優先佇列實現如下 pri...