求一个数据流的中位数
来源:互联网 发布:js设置input失去焦点 编辑:程序博客网 时间:2024/05/16 15:50
本题源自剑指offer
----------------------------------------------------------------------
用两个堆来解决这个问题 1用最大堆存储左半部分的数,用最小堆存储有半部分的数据,若有奇位个数,中位数就是最小堆的堆顶,否则为最大堆和最小堆堆顶的平均数。
如果当前数据流中的数为偶数个,则新数据插入最小堆,否则插入最大堆。保证最小堆中的数比最大堆的数大。
void Insert(int num) { //总数目为偶数时,插入最小堆,否则插入最大堆,最大堆的数字都比最小堆的小 if(((max.size()+min.size())&1)==0){ if(max.size()>0&&max[0]>num){ max.push_back(num); push_heap(max.begin(),max.end(),less<int>()); num=max[0]; pop_heap(max.begin(),max.end(),less<int>()); max.pop_back(); } min.push_back(num); push_heap(min.begin(),min.end(),greater<int>()); }else{ if(min.size()>0&&num>min[0]){ min.push_back(num); push_heap(min.begin(),min.end(),greater<int>()); num=min[0]; pop_heap(min.begin(),min.end(),greater<int>()); min.pop_back(); } max.push_back(num); push_heap(max.begin(),max.end(),less<int>()); } } double GetMedian() { int size=min.size()+max.size(); if(size==0) return -1.0; if(size&1){ return min[0]; } return (double)(min[0]+max[0])/2; }
阅读全文
0 0
- 求一个数据流的中位数
- 求数据流中的中位数
- 数据流的中位数
- 数据流的中位数
- 数据流的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数。
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- 求一个无序数组的中位数
- POJ_Dynamic Median 数据流的中位数
- [Google] 给一个无限的数据流,问某个时刻的中位数 。1) 数据流是整数 2)数据流不是整数
- 数据流中位数
- 求中位数的问题
- 剑指offer-----数据流的中位数(java版)
- 剑指offer-63题 数据流的中位数
- 算法学习
- php调用存储过程
- PowerEnglish--27-30章
- 二叉树的所有路径
- [Android] 外部链接唤醒App
- 求一个数据流的中位数
- leetcode 303. Range Sum Query
- C++ 继承模板类含有多个参数类型
- 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?
- Java平方不能用^ .用Math.pow(x, 2)
- 正确选用屏幕保护视力
- C#多线程
- js间隔几秒刷新页面
- opencv学习笔记三 视频处理序列(1)读取视频序列