题解 | #数据流中的中位数#

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

# -*- coding:utf-8 -*-
import heapq

class Solution:
    def __init__(self) -> None:
        self.min_heap = []
        self.max_heap = []
		# 维护两个根堆

    def Insert(self, num):
        # write code here
        if not self.min_heap: # 初始比较小的min堆,这个堆是大根堆,递减
            heapq.heappush(self.min_heap, -num)
        else:
            if num > -self.min_heap[0]: # 如果数比min的最大值大,放入max堆,max堆是小根堆,递增;否则放min堆
                heapq.heappush(self.max_heap, num) 
            else:
                heapq.heappush(self.min_heap, -num)
            # 调整他俩数量差,不能大于1,一旦等于2,要平衡一下
            if len(self.min_heap) -2 == len(self.max_heap):
                cur = heapq.heappop(self.min_heap)
                heapq.heappush(self.max_heap, -cur)
            elif len(self.max_heap) -2 == len(self.min_heap):
                cur = heapq.heappop(self.max_heap)
                heapq.heappush(self.min_heap, -cur)
        
    def GetMedian(self):
        # write code here
		# 最终他俩堆的顶元素就是最中间的两个数
        if len(self.min_heap) > len(self.max_heap):
            return -self.min_heap[0]
        elif len(self.min_heap) < len(self.max_heap):
            return self.max_heap[0]
        else:
            return (-self.min_heap[0] + self.max_heap[0]) / 2

全部评论

相关推荐

求求给个offer我...:笑死了,笑完过了几分钟感觉挺可悲的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务