資料流中的中位數 牛客網

2021-09-25 15:11:08 字數 526 閱讀 4156

題意理解

求不斷增加數字的陣列中中位數的變化。

問題分析

用堆。乙個小頂堆儲存上半部分,乙個大頂堆儲存下半部分

沒插入乙個元素,根據當前元素和堆頂元素的比較選擇乙個堆存放,然後根據兩個堆的數量調整兩邊元素,保證上半部分比下半部分大1.

其他插入o(lgn),查詢o(1).

鏈結

priority_queue, less> small_heap; //存上半部分 小頂

priority_queue, greater> big_heap; //存下半部分 大頂

public:

void insert(int num)

else

if (small_heap.size() - big_heap.size() == -1)

if (small_heap.size() - big_heap.size() == 2)

}double getmedian()

else

}

牛客網 劍指office 資料流中的中位數

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

牛客網 Python 資料流中的中位數(未結束)

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

資料流中的中位數

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