題意理解
求不斷增加數字的陣列中中位數的變化。
問題分析
用堆。乙個小頂堆儲存上半部分,乙個大頂堆儲存下半部分
沒插入乙個元素,根據當前元素和堆頂元素的比較選擇乙個堆存放,然後根據兩個堆的數量調整兩邊元素,保證上半部分比下半部分大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.插入時先二分查詢插...
資料流中的中位數
資料流中的中位數 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。解題思路 維護乙個大堆和乙個小堆,大堆表示序列前一半數,小堆表示序列後一半數,保持兩個堆的元素個...