劍指offer 63 樹 資料流中的中位數

2022-06-29 05:42:08 字數 808 閱讀 4646

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

理解了上面所述的主體思想,下面舉個例子輔助驗證一下。

例如,傳入的資料為:[5,2,3,4,1,6,7,0,8],那麼按照要求,輸出是"5.00 3.50 3.00 3.50 3.00 3.50 4.00 3.50 4.00 "

那麼整個程式的執行流程應該是(用min表示小頂堆,max表示大頂堆):

//小頂堆

private priorityqueueminheap = new priorityqueue();

//大頂堆

private priorityqueuemaxheap = new priorityqueue(15, new comparator()

});//記錄偶數個還是奇數個

int count = 0;

//每次插入小頂堆的是當前大頂堆中最大的數

//每次插入大頂堆的是當前小頂堆中最小的數

//這樣保證小頂堆中的數永遠大於等於大頂堆中的數

//中位數就可以方便地從兩者的根結點中獲取了

public

void

insert(integer num)

else

count++;

}public

double getmedian()

else

}

劍指offer 63 資料流中的中位數

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

劍指offer63 資料流中的中位數

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

劍指offer63 資料流中的中位數

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