如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用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 ...