劍指 offer 41. 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。
例如,[2,3,4] 的中位數是 3
[2,3] 的中位數是 (2 + 3) / 2 = 2.5
設計乙個支援以下兩種操作的資料結構:
void addnum(int num) - 從資料流中新增乙個整數到資料結構中。
double findmedian() - 返回目前所有元素的中位數。
示例 1:
輸入:[「medianfinder」,「addnum」,「addnum」,「findmedian」,「addnum」,「findmedian」]
[,[1],[2],,[3],]
輸出:[null,null,null,1.50000,null,2.00000]
示例 2:
輸入:[「medianfinder」,「addnum」,「findmedian」,「addnum」,「findmedian」]
[,[2],,[3],]
輸出:[null,null,2.00000,null,2.50000]
限制:最多會對 addnum、findmedian 進行 50000 次呼叫。
注意:本題與主站 295 題相同:
class
medianfinder
public
void
addnum
(int num)
else
}public
double
findmedian()
}// 優化 減少插入和出堆次數
// class medianfinder
// public void addnum(int num) else
// } else else
// }
// }
// public double findmedian()
// }
// /**
// * your medianfinder object will be instantiated and called as such:
// * medianfinder obj = new medianfinder();
// * obj.addnum(num);
// * double param_2 = obj.findmedian();
// */
劍指 Offer 41 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 示例...
《劍指offer》 41 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 vo...
劍指Offer41 資料流中的中位數
如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如,2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構 輸入...