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

数据流中的中位数

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

全部评论

相关推荐

02-01 19:48
门头沟学院 Java
神哥了不得:(非引流)直接暑期吧,没时间日常了,老鱼简历把水印去了,或者换个模板,简历字体大小都不太行,建议换2个高质量的项目,面试应该还会再多一些
点赞 评论 收藏
分享
什么时候才能有offer啊_:十年前我还在刺激战场研究跳伞的底层原理呢
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务