劍指Offer 063資料流中的中位數

2021-09-25 10:40:03 字數 759 閱讀 8720

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 方法獲取當前讀取資料的中位數。資料流中的資料需要用合...