剑指offer 面试题. 数据流中的中位数
题目描述
解答:
这题没做过,用一个最大堆和一个最小堆来夹逼中位数,记录一下这个方法。
限制条件有两个:
1.最大堆的数都比最小堆小,这一点可以通过二者的top来限制(即限制最大堆的top小于最小堆的top)。
2.最小堆的size要么等于最大堆的size,要么比最大堆的size大1。这是什么意思呢,举个栗子:
最大堆:1,2,3,4
最小堆:6,7,8,9(当然这里不符合堆的性质,只是举例其中含有的数字)
那么此时二者size相同,中位数就是最小堆的top。
如果最小堆多一个10,即此时最小堆为:6,7,8,9,10
那么中位数就恰好是最大堆的top和最小堆的top的平均数。
另外一点就是priority_queue默认是最大堆,greater<int>是最小堆,less<Int>是最大堆,下次记住吧。。。。
代码:
class Solution {
public:
priority_queue<int,vector<int>,less<int>> heap_le;
priority_queue<int,vector<int>,greater<int>> heap_ri;
void Insert(int num)
{
if(heap_le.empty() or heap_le.top()>=num){
heap_le.push(num);
}
else{
heap_ri.push(num);
}
while(not heap_le.empty() and not heap_ri.empty() and heap_le.top()>heap_ri.top()){//保持性质1
heap_ri.push(heap_le.top());
heap_le.pop();
}
while(heap_le.size()>heap_ri.size()){//保持性质2
heap_ri.push(heap_le.top());
heap_le.pop();
}
while(heap_le.size()<heap_ri.size()-){//保持性质2
heap_le.push(heap_ri.top());
heap_ri.pop();
}
}
double GetMedian()
{
return (heap_le.size()+heap_ri.size())%?heap_ri.top()*1.0:(heap_le.top()+heap_ri.top())/2.0;
}
};
2020-02-14 15:14:57
剑指offer 面试题. 数据流中的中位数的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...
- 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点
鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...
- 【剑指Offer面试题】九度OJ1384:二维数组中的查找
下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
随机推荐
- Luogu2040 | 打开所有的灯 (广搜+状压)
题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的 ...
- 写Blog的准备工作Window Live Writer
以下是博客园的帮助博客: Windows Live Writer配置步骤 感觉里面的几篇推荐文档都可以看一下,至于代码高亮插件,个人选择的还是SyntaxHighlighter. 一. 关于写blog ...
- 剑指offer-面试题25-合并两个排序的链表-链表
/* 题目: 输入两个递增排序的链表,合并这两个链表并使新的链表中的节点依然是递增排序. 返回新链表的头节点. */ /* 思路: 1.返回的链表的头节点为两个链表中头节点数值更小的为链表1. 2.进 ...
- gulp常用插件之gulp-imagemin使用
更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-imagemin这是一款缩小PNG,JPEG,GIF和SVG图像的插件. 更多使用文档请点击访问gulp-imagemin工具官网. 安 ...
- 曼孚科技:AI语音交互领域常用的4个术语
语音交互是基于语音输入的新一代交互模式,比较典型的应用场景是各类语音助手. 本文整理了语音交互领域常用的4个术语,希望可以帮助大家更好地理解这门学科. 1. 语音合成标记语言(SSML) 语音合成标 ...
- 简单记账本APP开发二
今天主要是进行了适配器的编写,数据库的创建以及对完善了业务逻辑,简单的APP到此已经通过测试可以使用.
- window服务session隔离
在window服务中抓取窗体是做不到的,因为window系统的session隔离机制:如果想要调用外部程序,可以通过 创建代理进程 进行操作(通过非托管代码CreateProcessAsUser函数进 ...
- 手把手带你开发一款 IIS 模块后门
https://cloud.tencent.com/developer/article/1507913 首先准备工具 VS2017 IIS 开始开发 先打开 VS 创建一个 winfrom 项目然后添 ...
- Extended Traffic LightOJ - 1074 spfa判断负环
//判断负环 在负环内的城市输出? #include <iostream> #include <queue> #include <cstdio> #include ...
- Matlab技巧1:在同一坐标系上绘制两个函数图像
x=-:; y1=sqrt(*abs(x)-x.^); y2=asin(abs(x)-)-pi/; plot(x,y1,'r',x,y2,'b') grid 程序结果: