找中位数(用堆维持小的一半数,建立大根堆)
2013-01-05 15:39
232 查看
/*找中位数(用堆维持小的一半数,建立大根堆) 限制内存为2M,而有50W个数字。直接用数组存必定超内存 所以用一个最大为25W的数组做堆,维持一半数字即可 */ #include <cstdio> #include <stdlib.h> #include <algorithm> using namespace std; int main() { int n; scanf("%d", &n); int data[250005]; int half = n/2 +1; int i; for(i=0; i<half; i++) scanf("%d", &data[i]); make_heap(data, data+half); //printf("%d\n", half); while(i < n) { int newData; scanf("%d", &newData); //如果新的值比大根堆的顶端要小,那么就先弹出堆顶,让新的入堆,然后再调整堆 if(newData < data[0]) { pop_heap(data, data+half); data[half-1] = newData; push_heap(data, data+half); } i++ ; } if(n % 2 == 1) printf("%0.1f\n", (float)data[0]); else { int secondMax; if(data[1] > data[2]) secondMax = data[1]; else secondMax = data[2]; printf("%0.1f\n", ((float)data[0]+ (float)secondMax)/2); } system("pause"); return 0; }
相关文章推荐
- 堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,5,8 后,得到的堆的结构示意图是下述图表中的哪个?
- 维持中位数的方法?
- 大根堆 小根堆 找中位数
- 【数据结构-排序】大根堆的建立
- Pongo建立信号基站-实际上还是考中位数
- Pongo建立信号基站-实际上还是考中位数
- C++实现建立大根堆
- 建立并维持高度团队精神的七大步
- 大根堆的建立(python)
- 巧用空数组建立动态缓冲区
- Linux机器建立密钥信任
- oracle 建立外键约束时on delete cascade 和 on delete set null
- 建立第一个 Yii 应用
- 4.HCNP-R&S-IERN——建立OSPF邻居与邻接关系
- CSU 1212 中位数
- 单链表的建立
- 查找中位数
- 建立分析模型和设计模型
- L2TP隧道的呼叫建立流程
- android 当工程建立完成以后不要给生成的java文件改名字