目录

  • 题目描述
  • 问题分析
  • c++代码

题目描述

问题分析


使用大小堆来完成:

我们让最大堆总是大于最小堆一个量或者等于最小堆数量,中位数只可能是最大堆顶或最大堆与最小堆堆顶平均值。

c++代码

class MedianFinder {public://大顶堆 + 小顶堆 的方法//小顶堆priority_queue<int, vector<int>, greater<int>> minHeap;//大顶堆priority_queue<int> maxHeap;MedianFinder() {}// 时间复杂度为O(logn)//如果整个列表的长度为n的话//那么大顶堆就用于存储前k个较小的元素,因为大顶堆中的堆顶的元素值最大//而小顶堆就用于存储后n-k个较大的元素,因为小顶堆中的堆顶的元素值最小//k和n-k还必须满一个条件:那就是当n为偶数时,k=n-k;当n为奇数时,k=n-k+1;必须满足这个等式//当n为偶数时,中位数等于(大顶堆堆顶值 + 小顶堆堆顶值)/ 2//当n为奇数时,中位数就等于大顶堆堆顶值void addNum(int num) {//为空直接存if (maxHeap.empty()) {maxHeap.push(num);return;}if (num <= maxHeap.top()) maxHeap.push(num);else minHeap.push(num);//最大堆只能比最小堆多一个元素,或者两者相等if (maxHeap.size() > minHeap.size() + 1) {minHeap.push(maxHeap.top());maxHeap.pop();}//最大堆不能比最小堆中的元素少if (maxHeap.size() < minHeap.size()) {maxHeap.push(minHeap.top());minHeap.pop();}}double findMedian() {if (maxHeap.size() == minHeap.size() + 1) { //大顶堆元素数量比小顶堆元素数量多一return maxHeap.top();}else { //大顶堆元素数量 = 小顶堆元素数量return (maxHeap.top() + minHeap.top()) * 0.5;}}
};
/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

力扣—— 295. 数据流的中位数(困难)相关推荐

  1. 295. 数据流的中位数

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

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

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

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

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

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

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

  5. 76. Leetcode 295. 数据流的中位数 (堆-技巧一-固定堆)

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

  6. 力扣—— 224. 基本计算器(困难)

    目录 题目描述 题目分析 c++代码 题目描述 给你一个字符串表达式s,请你实现一个基本的计算器来返回它的值.注意不允许使用任何将字符串作为数学表达式计算的内置函数,比如:eval(). 示例一: 输 ...

  7. 力扣热门题目简单部分合集(共23道)

    文章目录 前言 1.两数之和(哈希表,双指针,数组) 2.有效的括号(栈,哈希表) 3.合并两个有序链表(递归,迭代) 4.最大子数组和(动态规划,分治,贪心) 5.爬楼梯(迭代,递归,动态规划,数学 ...

  8. 力扣OJ 剑指 Offer II

    目录 剑指 Offer II 001. 整数除法 剑指 Offer II 002. 二进制加法 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 剑指 Offer II 004. ...

  9. python【力扣LeetCode算法题库】4- 寻找两个有序数组的中位数

    寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

最新文章

  1. js-forEach 不能使用break continue return true false
  2. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用
  3. PowerDesigner的Table视图同时显示Code和Name的方法[转发]
  4. springmvc @PathVariable注解进行传参操作
  5. windowsXP用VNC客户端连接centos6桌面后再用tsclient连接windows2003/2008桌面
  6. python做俄罗斯方块如何显示下一个随机方块_随机俄罗斯方块形状
  7. LeetCode - Best Time to Buy and Sell
  8. PE文件格式详解(下)
  9. SEO:避免关键词内部竞争带来的无法收录问题,
  10. 类似纪念碑谷的unity2d素材包_《纪念碑谷》:引领小清新风格的2.5D插画风游戏...
  11. cve20190708补丁的kb名称_kb4499175补丁下载
  12. 装配区5s管理制度推行办法
  13. python发送短信接口_Python发短信接口
  14. 直角三角公式计算机,直角三角形
  15. 创建mysql视图索引_mysql 创建索引和视图
  16. 零基础小白如何系统的自学网络安全(包含学习路线、工作方向)
  17. 【毕业设计】图像检索算法(以图搜图)
  18. 腾讯云「轻量应用服务器」开放公测!
  19. GNS3快捷安装指南
  20. 数据结构算法之哈希表

热门文章

  1. 对称二叉树c++_数据结构学习(C++)——平衡二叉树
  2. go tcp客户端自动重连_在Go中构建并发TCP服务器样例
  3. babel原理_手写webpack核心原理,再也不怕面试官问我webpack原理
  4. pytorch学习笔记(三十七):Adam
  5. 目标检测——检测结果的可视化
  6. 《深度学习笔记》——深度神经网络的调试笔记
  7. C语言实现2048小游戏
  8. 统计bytearray中的bitcount
  9. python中的struct模块
  10. html5中的FileReader对象