63 資料流中的中位數

2021-08-20 13:50:47 字數 603 閱讀 8696

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

思路:構造乙個最大堆和乙個最小堆,最大堆用來存放較小的那一半的資料,最小堆用來存放較大的那一半的資料,每次插入資料時與最大堆的堆頂進行比較,若比其小或相等,則插入最大堆,反之插入最小堆;插入資料後需要平衡兩個堆的大小,保證最大堆的大小永遠與最小堆相等或多一,最後若兩個堆的大小相等,則返回兩個堆頂的平均值,若最大堆比最小堆多一,則返回最大堆的堆頂即可;注意c++中最小堆和最大堆的定義格式。

**:

class solution  else 

if(maxp.size() == minp.size() + 2)

if(maxp.size() + 1 == minp.size())

}double getmedian() else

}private:

priority_queue, less> maxp; //從大到小,最大堆

priority_queue, greater> minp; //從小到大,最小堆

};

63資料流中的中位數

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

63 資料流中的中位數

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

63 劍指offer 資料流中的中位數

題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值 解題思路 分為兩種情況,奇數取中間的數字,偶數取中間兩個數的平均值。使用兩個堆來實現,左側使用最大堆儲存...