对于海量数据与数据流,用最大堆,最小堆来管理。

class Solution {
public:
/*
* 1.定义一个规则:保证左边(大顶堆)和右边(小顶堆)个数相差不大于1,且大顶堆的数值都小于等于小顶堆的数 *
2.大小堆顶可以用优先序列实现
插入规则:
当插入数值小于左边的堆顶时候,就插入左边,否则插入右边堆。(注意初始为空时,插入不能比较)
调整使得满足个数差<=1:
正常时是只有两种情况:p=q或者p=q+1,由于每插一个值就会考虑调整,那么边界情况就是p=q+2或者p+1=q
p=q+2时,弹出左边大顶堆p的堆顶,并将其插入到q
p+1=q时,弹出右边小顶堆q的堆顶,并将其插入到p
* 3. 如果是奇数:中位数mid=左边的堆顶,因为先插入到左边,再插入到右边;为奇数时,中位数就是两个堆顶的平均值.
*/
priority_queue <int, vector<int>,less<int> > p; //大顶堆p,注意最后两个>>不能连写,否则是右移运算
priority_queue <int,vector<int>,greater<int> > q;//小顶堆q void Insert(int num)
{
if(p.empty()||num<p.top())
p.push(num);//队列push,vector是push_back()
else
q.push(num);
if(p.size()==q.size()+)
q.push(p.top()),p.pop();//队列,pop()是删除第一个元素,但没有返回值
if(p.size()+==q.size())
p.push(q.top()),q.pop();
} double GetMedian()
{
return p.size()==q.size() ? (p.top()+q.top())/2.0 : p.top();//除以2.0返回double
} };

最新文章

  1. 4.bootstrap练习笔记-内容区块
  2. NOIP2014 day2 T2寻找道路
  3. 常用的工具cmd命令
  4. rmmod 无法卸载模块问题
  5. Objective-C 【@property 的参数问题】
  6. CodeForces 478B 第八次比赛 B题
  7. Magic of David Copperfield II(奇偶性)
  8. springmvc问题汇总
  9. 确定比赛名次(map+邻接表 邻接表 拓扑结构 队列+邻接表)
  10. Android WebView挂马漏洞--各大厂商纷纷落马
  11. 手把手教你webpack、react和node.js环境配置(上篇)
  12. alpha-咸鱼冲刺day4-紫仪
  13. Zepto源码分析之二(新旧版本zepto.Z方法的区别)
  14. Linux 下压缩与解压.zip和.rar
  15. 入门项目 A1 start
  16. Java语言访问Redis数据库之Set篇
  17. docker安装与卸载
  18. 学界 | Yann LeCun新作,中日韩文本分类到底要用哪种编码?
  19. android sqlite blob
  20. vulcanjs 开源工具方便快速开发react graphql meteor 应用

热门文章

  1. HDU 5191
  2. MySQL数据库表的数据插入、修改、删除、查询操作及实例应用
  3. 线程同步、死锁和通信——Java多线程(二)
  4. 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!
  5. nyoj--973--天下第一(SPFA判断负环)
  6. 两道人数多,课程少,query多的题
  7. TreeSet中的排序问题——Comparable
  8. Mvc NuGet 数据迁移
  9. All Metro Apps on Windows 8.1 Do Not Work
  10. jquery自动完成插件的使用