剑指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 ...
随机推荐
- Spring中 @Autowired注解与J2EE@Resource注解的区别
在开发中经常使用到@Autowired和@Resource进行装配. 不禁好奇这两个注解的差异在何处??? 相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的sett ...
- 【笔记】机器学习 - 李宏毅 - 6 - Logistic Regression
Logistic Regression 逻辑回归 逻辑回归与线性回归有很多相似的地方.后面会做对比,先将逻辑回归函数可视化一下. 与其所对应的损失函数如下,并将求max转换为min,并转换为求指数形式 ...
- Uva1363(余数性质/减少枚举量)
题意: 输入正整数n和k(范围均为1e9),求∑(k mod i),i从1~n 解法: 首先这道题直接暴力亲测会超时. 之后我们写几组数据之后可以发现当k/i的商相同的时候他们的余数成一个等差数列,而 ...
- STL-set&&multiset 集合
#include <iostream> #include <cstdio> #include <set> // 仿函数的原型 //struct greaters / ...
- WPF DataGrid标题Header Binding失效
前言:因业务需要对WPF中的DataGrid控件中的行数进行统计,同时把统计的行数显示在列标题上. 如果我们用常规的Binding手段更新DataGridTextColunm的Header的话是不会生 ...
- C# compare different Encoding pattern between UTF8 and UTF32 based on Md5
using System; using System.Text; using System.IO; using System.Security.Cryptography; static void Ma ...
- 封装的Redis队列
封装的Redis队列 MyRedisQueue.py #!usr/bin/env python2.7 # -*- coding: utf-8 -*- import redis class RedisQ ...
- react 项目 测试
Enzyme 来自 airbnb 公司,是一个用于 React 的 JavaScript 测试工具,方便你判断.操纵和历遍 React Components 输出.Enzyme 的 API 通过模仿 ...
- openlayers地图显示点
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- PAT (Advanced Level) Practice 1008 Elevator (20 分) (模拟)
The highest building in our city has only one elevator. A request list is made up with N positive nu ...