T60 資料流中的中位數(Java)

2021-09-03 02:38:16 字數 607 閱讀 2268

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

分析:建立2個大根堆,乙個max用於存放資料中較小的部分,乙個min存放較大的部分。整體思路是最後若max+min的個數為奇數則middle=max.last(用於取出最大的數)。若為偶數,則middle=(max.last+min.first)/2.0(即max的最大數和min的最小數的平均值)。這就是getmedian()函式。

而insert()函式,是用於存放資料的,該如何有序存放。開始max和min都為空,將乙個數存入max.add(num)。再來乙個數,則需要放乙個數到min中去,直接放?當然不是。需要將num和max.last()比較。若nummax =new treeset();

treesetmin =new treeset();

public void insert(integer num)

max.add(num);

}else{

if(max.size()>0&&num參考:

60 資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

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