劍指Offer系列41 資料流中的中位數

2021-10-06 03:55:30 字數 1604 閱讀 2253

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

例如,[2,3,4] 的中位數是 3

[2,3] 的中位數是 (2 + 3) / 2 = 2.5

設計乙個支援以下兩種操作的資料結構:

void addnum(int num) - 從資料流中新增乙個整數到資料結構中。

double findmedian() - 返回目前所有元素的中位數。

python

from heapq import

*class

medianfinder

:def

__init__

(self)

:"""

initialize your data structure here.

"""self.small_heap =

# 最小堆,儲存較大的一半

self.big_heap =

# 最大堆,儲存較小的一半

defaddnum

(self, num:

int)

->

none

:# 最大堆的元素都小於最小堆的元素,但num不一定比最小堆中元素小,故先將num插入最小堆,再將最小堆堆頂元素插入最大堆

iflen

(self.small_heap)

!=len

(self.big_heap): )

else

:-num)

)def

findmedian

(self)

->

float

:return self.small_heap[0]

iflen

(self.small_heap)

!=len

(self.big_heap)

else

(self.small_heap[0]

- self.big_heap[0]

)/2.0# your medianfinder object will be instantiated and called as such:

# obj = medianfinder()

# obj.addnum(num)

# param_2 = obj.findmedian()

c++
class

medianfinder

void

addnum

(int num)

else

count++;}

double

findmedian()

else}}

;/**

* 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 設計乙個支援以下兩種操作的資料結構 輸入...