day36 資料流中的中位數(大根堆小根堆)

2021-10-07 16:09:21 字數 598 閱讀 8230

問題描述:

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

樣例

使用大根堆維護序列的前半部分,使用小根堆維護序列的後半部分。序列是指的從小到大排列。首先向大根堆裡面加入元素,如果加入元素不滿足條件,那麼再進行下一步操作,其中條件是:1)大根堆裡面的元素最多只能比小根堆的元素多1個,如果多兩個的話,就需要將大根堆的元素彈出來放到小根堆裡面去,2)如果大根堆裡面的堆頂元素大於小根堆裡面的堆頂元素,那麼這樣的序列不是有序的,則需要交換這兩個元素使得大的部分在小根堆裡,小的部分在大根堆裡。

class

solution

if(max_heap.

size()

>min_heap.

size()

+1)//不可以新增min_heap.size()這一條件,否則在min_heap為空的條件下無法放入

}double

getmedian()

};

資料流中的中位數

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

資料流中的中位數

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

資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。簡單題 找中位數 coding utf 8 class solution x def insert self,nu...