剑指 Offer 41. 数据流中的中位数https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/
暴力求解,每次查找,都排序就好
class MedianFinder:
def __init__(self):
self.res=[]
def addNum(self, num):
self.res.append(num)
def findMedian(self):
l=len(self.res)
self.res.sort()
if l%2:
return self.res[l//2]
else:
return (self.res[l//2]+self.res[l//2-1])/2
大顶堆,小顶堆的方法。
首先要把下面文章搞懂
Python没有大顶堆,怎么办呢?
那就把所有数取它的相反数,这样,就可以用小顶堆。
from heapq import *
class MedianFinder:
def __init__(self):
self.A = [] # 小顶堆,保存较大的一半
self.B = [] # 大顶堆,保存较小的一半
def addNum(self, num: int) -> None:
if len(self.A) != len(self.B):
heappush(self.A, num)
heappush(self.B, -heappop(self.A))
else:
heappush(self.B, -num)
heappush(self.A, -heappop(self.B))
def findMedian(self) -> float:
return self.A[0] if len(self.A) != len(self.B) else (self.A[0] - self.B[0]) / 2.0
作者:jyd
链接:https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/solution/mian-shi-ti-41-shu-ju-liu-zhong-de-zhong-wei-shu-y/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。