Leetcode 295. Find Median from Data Stream
题目
解法1:simple sorting
每次找中位数的操作都将列表进行重新排序,这种解法时间复杂度为O(nlogn)
class MedianFinder:
def __init__(self):
"""
initialize your data structure here.
"""
self.numList = []
def addNum(self, num: int) -> None:
self.numList.append(num)
def findMedian(self) -> float:
self.numList = sorted(self.numList)
n = len(self.numList)
if n%2 != 0:
return self.numList[n//2]
else:
return (self.numList[n//2 -1] + self.numList[n//2])/2
解法2:插入
想办法保持列表是一个有序的序列,这样就可以做到每次查询中位数只需要O(1)的复杂度。保持增序可以通过在添加新元素时以插入的方式来进行。插入最简单的就是每次从一个方向去找,然后直到找到合适的位置,这种时间复杂度为O(n)。很奇怪的是这种复杂度比上面的要小,但是上面的可以通过,这种解法却TLE。
class MedianFinder:
def __init__(self):
"""
initialize your data structure here.
"""
self.numList = []
def addNum(self, num: int) -> None:
if not self.numList:
self.numList.append(num)
else:
for i in range(len(self