如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert()方法讀取資料流,使用getmedian()方法獲取當前讀取資料的中位數。
這個使用優先佇列的思路非常值得學習
priorityqueue
minheap =
newpriorityqueue
<
>()
;priorityqueue
maxheap =
newpriorityqueue
<
>
(new
comparator
()})
;int count =0;
public
void
insert
(integer num)
else
count++;}
public double getmedian()
else
}
63 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。思路 構造乙個最大堆和乙個最小堆,最大堆用來存放較小的那一半的資料,最小堆用來存放較大的那一半的資料,每次插入資料...
63 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert 方法讀取資料流,使用getmedian 方法獲取當前讀取資料的中位數。import j a....
63 劍指offer 資料流中的中位數
題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值 解題思路 分為兩種情況,奇數取中間的數字,偶數取中間兩個數的平均值。使用兩個堆來實現,左側使用最大堆儲存...