技巧一 - 固定堆这个技巧指的是固定堆的大小 k 不变,代码上可通过每 pop 出去一个就 push 进来一个来实现。而由于初始堆可能是0,我们刚开始需要一个一个 push 进堆以达到堆的大小为k,因此严格来说应该是维持堆的大小不大于k。

具体可以进行如下操作:情况 1: 当两个堆的元素个数之和为偶数(例如一开始的时候),为了让最大堆中多 1 个元素,
采用这样的流程:「最大堆 → 最小堆 → 最大堆」;情况 2: 当两个堆的元素个数之和为奇数,此时最小堆必须多 1个元素,这样最大堆和最小堆的元素个数才相等,
采用这样的流程:「最大堆 → 最小堆」 即可。import heapqclass MedianFinder:def __init__(self):self.count = 0self.max_heap = []self.min_heap = []def addNum(self, num: int) -> None:self.count += 1heapq.heappush(self.max_heap, (-num, num))_, max_heap_top = heapq.heappop(self.max_heap)heapq.heappush(self.min_heap, max_heap_top)if self.count & 1:min_heap_top = heapq.heappop(self.min_heap)heapq.heappush(self.max_heap, (-min_heap_top, min_heap_top))def findMedian(self) -> float:if self.count & 1:return self.max_heap[0][1]else:return (self.min_heap[0] + self.max_heap[0][1])/2# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()

76. Leetcode 295. 数据流的中位数 (堆-技巧一-固定堆)相关推荐

  1. LeetCode 295. 数据流的中位数 Hard难度

    295. 数据流的中位数 题目: 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 ...

  2. LeetCode 295. 数据流的中位数(大小堆)

    文章目录 1. 题目 2. 大小堆解题 1. 题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 ...

  3. Leetcode 295. 数据流的中位数

    1.题目要求 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个 ...

  4. 295. 数据流的中位数

    295. 数据流的中位数 欢迎大家参加每日一题系列并提供其他版本,在你也可以按照相同格式提供你的最新的每日一题题解. 每日一题系列 题目描述: 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是 ...

  5. 【leetcode】数据流的中位数

    一.题目描述 中位数是有序整数列表中的中间值.如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值. 例如 arr = [2,3,4] 的中位数是 3 . 例如 arr = [2,3] 的中 ...

  6. [LeetCode][C++]数据流的中位数

    数据流的中位数 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一 ...

  7. 力扣—— 295. 数据流的中位数(困难)

    目录 题目描述 问题分析 c++代码 题目描述 问题分析 使用大小堆来完成: 我们让最大堆总是大于最小堆一个量或者等于最小堆数量,中位数只可能是最大堆顶或最大堆与最小堆堆顶平均值. c++代码 cla ...

  8. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  9. LeetCode 703. 数据流中的第K大元素(优先队列)

    1. 题目 设计一个找到数据流中第K大元素的类(class). 注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...

最新文章

  1. 零基础自学python看什么书-零基础想要学习Python编程 ,不知道看哪本书?
  2. How to remove the dotted border on Active link state---移除链接激活时出现的虚线
  3. 【Python】多线程的使用,通过传参接收返回值
  4. 初识面向对象(理论1)
  5. python写crm_Python CRM项目八
  6. 如何 调系统相机_神仙理光相机,各种静物原片直出也太美了吧!!!
  7. MAC OS(U盘启动教程)
  8. Repast HPC 2.0安装及实例模型运行总结
  9. UVA - 473 Raucous Rocker 多维dp
  10. 十个经典Android开源APP项目
  11. 算法基础: 什么是红黑树?
  12. 什么是放射性活度,半衰期,照射量和吸收剂量?
  13. 《那些年啊,那些事——一个程序员的奋斗史》——48
  14. 鸡兔同笼python程序怎么写_Python解决鸡兔同笼问题的方法
  15. 在VB编程中,如何实现加入声音
  16. 当打开报表时显示一直在取数中
  17. 怎么把mp4转换成mp3音频
  18. 邮储银行修改快捷支付绑定手机号
  19. 2013年3月武当山自助游个人经验分享
  20. 华为od机试题9 真题

热门文章

  1. [Android1.6]继承BaseAdapter为GridView设置数据时设置setLayoutParams时注意
  2. 手机的基本功能测试---情景模式
  3. ubuntu上开启SSH服务
  4. 数据为王:大数据如何影响消费金融
  5. 【FTP】java FTPClient 文件上传内容为空,文件大小为0
  6. MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:
  7. 基于8086CPU微处理器的汇编学习之段地址与偏移地址的分析
  8. 《大话数据结构》读书笔记-查找
  9. 李永乐线性代数手写笔记-向量
  10. android 常用 style,Android中 Styles和Themes