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

数据流中的中位数

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

全部评论

相关推荐

浪子陪都:简历最优秀的地方放到了后面,国奖,校级奖学金这些是最亮眼的。说明你跟同级别的学生不一样。 建议台灯这个,PCB布局布线这个词汇不专业,业内是PCB Layout,第二,单片机的板子一般不用考虑SI,PI 都是低速信号,只要遵循3W原则就好了。 单片机的项目太low了,技能这块,你要看一下BOSS直聘的招聘要求,按照别人的要求写,一些关键词可以增加你简历被检索到的概率。 主修课程不用写,这个没有人去关注的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务