63.數據流中的中位數
問題:
如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取數據流,使用GetMedian()方法獲取當前讀取數據的中位數。
解決:
思想:
對於輸入流問題,首先建立一個l列表作爲輸入流存儲單元,然後通過Insert函數將數據流輸入到存儲單元中,最後從l中選取中間數。
python代碼:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.l=[]
def Insert(self, num):
# write code here
self.l.append(num)
self.l.sort()
def GetMedian(self,data):
# write code here
n=len(self.l)
if(n%2==1):
return self.l[n//2]
if(n%2==0):
loc1,loc2=n//2-1,n//2
mid=(self.l[loc1]+self.l[loc2])/2.0
return mid