面試題41 資料流中的中位數

2022-09-13 08:30:09 字數 894 閱讀 9136

題目:

解答:

方法一:c++超時

1

class

medianfinder

1011

//returns the median of current data stream

12double

findmedian()

1319 };

方法二:二分查詢插入

方法一的缺點在於對陣列進行了排序操作,導致時間複雜度較高,假如每次插入乙個值前陣列已經排好序了呢?這樣我們只需考慮每次將值插在合適的位置即可,所以使用二分查詢來找到這個合適的位置,會將時間複雜度降低到o(n)(查詢: o(logn),插入: o(n))

1

class

medianfinder

1314

//returns the median of current data stream

15double

findmedian()

1620 };

方法三:優先佇列(堆)

我們將中位數左邊的數儲存在大頂堆中,右邊的數儲存在小頂堆中。這樣我們可以在 }(1)o(1) 時間內得到中位數。

1

class

medianfinder 18}

1920

//returns the median of current data stream

21double

findmedian()

2225 };

劍指 面試題41 資料流中的中位數

題目 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如 2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構...

面試題41 劍指offer 資料流中的中位數

題目 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。思路 建立兩個堆,乙個最小堆乙個最大堆,要達到當元素數量是偶數時,中位數就是兩個堆頂的平均值,如果為奇數,就...

41 資料流中的中位數

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