劍指Offer(Python多種思路實現):數據流中的中位數
面試41題:
題目:數據流中的中位數
題:如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。
解題思路一:直接法,排序後求中位數
class Solution:
def __init__(self):
self.array=[]
def Insert(self, num):
# write code here
self.array.append(num)
self.array.sort()
def GetMedian(self,M):
# write code here
length=len(self.array)
if len(self.array)%2==1:
return self.array[length//2]
else:
return (self.array[length//2-1]+self.array[length//2])/2.0
解題思路二:
import heapq as hq
class MedianFinder:
def __init__(self):
self.lo, self.hi = [], [] # lo is max_heap, hi is min_heap
def addNum(self, num):
hq.heappush(self.lo, -num)
hq.heappush(self.hi, -hq.heappop(self.lo))
if len(self.lo) < len(self.hi):
hq.heappush(self.lo, -hq.heappop(self.hi))
def findMedian(self):
if len(self.lo) == len(self.hi):
return (-self.lo[0]+self.hi[0]) / 2.0
else:
return float(-self.lo[0])