劍指offer 資料流中的中位數(詳細解釋!!!)

2021-10-24 03:16:29 字數 540 閱讀 6705

題目

如何得到乙個資料流中的中位數?

如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。

如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。

樣例輸入:1, 2, 3, 4

輸出:1,1.5,2,2.5

解釋:每當資料流讀入乙個資料,就進行一次判斷並輸出當前的中位數。

元素都先插到大頂堆

如果大頂堆堆頂大於小頂堆堆頂,分別交換堆頂(先pop再push)

如果大頂堆數量比小頂堆大2,小頂堆push大頂堆堆頂,大頂堆pop

**如下:

class

solution

// 如果大頂堆數量比小頂堆大2,小頂堆push大頂堆堆頂,大頂堆pop

if(max_heap.

size()

>min_heap.

size()

+1)}

double

getmedian()

};

劍指offer 資料流中的中位數

題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。實現 public class getmediannum listnode in new listnod...

劍指Offer 資料流中的中位數

題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。思路整理 這個題目要解出來很簡單,但是這裡有乙個比較好的思路 用最大和最小堆來實現,就像乙個沙漏一樣,上...

劍指offer 資料流中的中位數

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