牛客網 Python 資料流中的中位數(未結束)

2022-09-11 22:48:37 字數 1217 閱讀 3770

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

1.插入時先二分查詢插入位置再進行插入

2.python進行除法時兩個整型得到整型(最終想要結果為float)

牛客該python版本有問題

#

-*- coding:utf-8 -*-#排序

class

solution:

def__init__

(self):

self.numlist =

definsert(self, num):

#write code here

l =0

r = len(self.numlist)-1

if r == -1:

elif r==0:

if num>=self.numlist[0]:

else

: self.numlist.insert(0,num)

else

:

while(l<=r):

mid = (l+r)//2

if self.numlist[mid]>num:

r = mid-1

if l>r:

self.numlist.insert(mid,num)

elif self.numlist[mid]l = mid+1

if l>r:

self.numlist.insert(mid,num)

else

: self.numlist.insert(mid,num)

def getmedian(self,n=none):

#write code here

l =len(self.numlist)

if l%2 ==0:

result = float((self.numlist[l//2-1]+self.numlist[l//2]))/2

else

: result = self.numlist[l//2]

return result

看答案大家用了大頂堆和小頂堆。

資料流中的中位數 牛客網

題意理解 求不斷增加數字的陣列中中位數的變化。問題分析 用堆。乙個小頂堆儲存上半部分,乙個大頂堆儲存下半部分 沒插入乙個元素,根據當前元素和堆頂元素的比較選擇乙個堆存放,然後根據兩個堆的數量調整兩邊元素,保證上半部分比下半部分大1.其他插入o lgn 查詢o 1 鏈結priority queue,l...

牛客網 劍指office 資料流中的中位數

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

資料流中的中位數python 資料流中的中位數

python用的自己實現的最大和最小堆的class,getmedian需要加個引數,否則python版會報錯。coding utf 8 最小堆 class minheap def init self self.minheap def len self return len self.minheap ...