優先佇列(一)資料流中的中位數

2022-09-28 13:27:07 字數 431 閱讀 8832

對應 leetcode 295 資料流中的中位數

設計乙個支援如下兩種操作的資料結構:

由於這裡無法確切知道資料元素的規模,因此一般通過列表的方式儲存元素再求取中位數的方式不是特別可靠。

考慮使用 「堆」 資料結構來完成這個功能,維護兩個堆:最大堆和最小堆,最大堆用於儲存中位數元素以下的所有元素,最小堆儲存大於等於中位數的所有元素。

為了方便,將最小堆中的堆頂元素視為奇數大小的資料流的中位數,在新增時注意小心地調整這兩個堆中的元素以使得滿足上面的條件

class medianfinder 

public void addnum(int num) else

}public double findmedian()

}

複雜度分析:

參考:[1]

[2]

資料流的中位數(優先佇列解決)

中位數是有序列表中間的數。如果列表長度是偶數,中位數則是中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例 addnum 1 addnum 2 findmedian 1.5 addnum 3 findmedian 2...

資料流中的中位數

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

資料流中的中位數

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