劍指offer63 資料流中的中位數

2021-10-20 18:05:31 字數 921 閱讀 6011

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

首先要理解題目,對於乙個流式輸入,要得到的結果應該是每輸入乙個數就要更新一次輸出結果。

例如:輸入1,2,3,4

輸出中位數應該是:1,1.5,2,2.5

類似的題目是:

字元流中第乙個不重複的字元

仿照上面的思路,用乙個陣列將流儲存起來,然後每來乙個就重新呼叫中位數計算函式來實現來乙個輸入更新乙個輸出。

class

solution

double

getmedian()

};

注意點:強制型別轉換

1.用內建的轉換方法

關鍵字說明

static_cast

一般不會導致意外發生。

const_cast

用於 const 與非 const、volatile 與非 volatile 之間的轉換

reinterpret_cast

高度危險的轉換,這種轉換僅僅是對二進位制位的重新解釋,不會借助已有的轉換規則對資料進行調整,但是可以實現最靈活的 c++ 型別轉換

dynamic_cast

借助 rtti,用於型別安全的向下轉型(downcasting)

用法:

static_cast

<

double

>(int) //將int強制轉換為double

2.直接顯式轉換

int a=1;

(double

) a;

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

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

劍指offer63 資料流中的中位數

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

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

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