老衛帶你學---劍指offer刷題系列(63.數據流中的中位數)

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章