063資料流中的中位數
題目:如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert()方法讀取資料流,使用getmedian()方法獲取當前讀取資料的中位數。
解釋:兩個函式,乙個插入函式,乙個得出中位數函式(排序之後的中位數)
方法:大小根堆法
思路:1.當資料總數為偶數時,新加入的元素,應當進入小根堆(注意不是直接進入小根堆,而是經大根堆篩選後取大根堆中最大元素進入小根堆)
2.當資料總數為奇數時,新加入的元素,應當進入大根堆(注意不是直接進入大根堆,而是經小根堆篩選後取小根堆中最大元素進入大根堆)
兩者都是要進另乙個根堆中,選出最大或者最小的元素再加入另乙個根堆中
**:
private int count = 0;
private priorityqueueminheap = new priorityqueue<>();
private priorityqueuemaxheap = new priorityqueue(15, new comparator()
});public void insert(integer num) else
count++;
}public double getmedian() else
}
劍指offer 資料流中的中位數
題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。實現 public class getmediannum listnode in new listnod...
劍指Offer 資料流中的中位數
題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。思路整理 這個題目要解出來很簡單,但是這裡有乙個比較好的思路 用最大和最小堆來實現,就像乙個沙漏一樣,上...
劍指offer 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert 方法讀取資料流,使用getmedian 方法獲取當前讀取資料的中位數。資料流中的資料需要用合...