LC 速查

HOT 100索引 › B13 堆 Heap

LC 295数据流的中位数Find Median from Data Stream 困难

设计数据结构支持不断添加整数,并随时取出已读入全部数字的中位数。

思路 对顶堆:heappushpop 归位到对面堆,保持 small(存相反数)多 0/1 个;取中位数看两堆顶。add/查询 O(log n)/O(1)。

class MedianFinder:
    def __init__(self):
        self.small = []  # 较小一半,存相反数
        self.large = []  # 较大一半

    def addNum(self, num: int) -> None:
        heappush(self.large, -heappushpop(self.small, -num))
        if len(self.large) > len(self.small):
            heappush(self.small, -heappop(self.large))

    def findMedian(self) -> float:
        if len(self.small) > len(self.large):
            return float(-self.small[0])
        return (-self.small[0] + self.large[0]) / 2
← 上一题 前 K 个高频元素买卖股票的最佳时机 下一题 →