C++100w个数中找出最大的前K个数
/*100w个数中找出最大的前K个数*/
#include <iostream>
using namespace std;
#include <assert.h>
const int N = 10000;
const int K = 100;
void AdjustDown(int topK[], int size, size_t parent)
{
assert(topK);
int child = parent*2 + 1;
while (child < size)
{
if (child+1 < size
&& topK[child+1] < topK[child])
{
++child;
}
if (topK[child] < topK[parent])
{
swap(topK[child], topK[parent]);
parent = child;
child = parent*2 + 1;
}
else
{
break;
}
}
}
void GetTopKValue(int array[], int topK[])
{
assert(K < N);
for (int i = 0; i < K; ++i)
{
topK[i] = array[i];
}
//建小堆
for (int i = (K-2)/2; i >= 0; --i)
{
AdjustDown(topK, K, i);
}
for (int i = K; i < N; ++i)
{
if (array[i] > topK[0])
{
topK[0] = array[i];
AdjustDown(topK, K, 0);
}
}
for (int i = 0; i < K; ++i)
{
cout<<topK[i]<<" ";
if (i%5 == 0)
{
cout<<endl;
}
}
cout<<endl;
}
void Test()
{
int array[N] = {0};
int topK[K] = {0};
for (int i = 0; i < N; ++i)
{
array[i] = i;
}
array[9] = 111111;
array[99] = 1111111;
array[999] = 11111111;
GetTopKValue(array, topK);
}
int main()
{
Test();
return 0;
}
转载于:https://blog.51cto.com/zgw285763054/1785416
C++100w个数中找出最大的前K个数相关推荐
- 如何从100万个数中找出最大的前100个数
1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边 ...
- 从100万个数中找出最大的前100个数
https://blog.csdn.net/cslbupt/article/details/65935577 1.算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个 ...
- 从10亿个数字中找出最大的前100个数
先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...
- 从一亿个数中找出最大的一万个数或最小的一万个数
1 从一亿个数中找出最大的一万个数:(前10000个元素构建最小堆,后续元素与根节点比较,大于放进去,小于或等于不处理) 用前一万个数初始化一个固定大小为10000的最小堆,这时根节点是这10000个 ...
- 海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)
在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数.必须在海量的文章中取出点击量最大的10篇文章. 此类问题其实就是Top K问题. 给定一个数据(数据量海量 N),想找到前 K ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 10亿个数中找出最大的10000个数
转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...
- 10亿个数中找出最大的10000个数之top K问题
方法一.先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
top K问题 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热 ...
最新文章
- mongoose的populate
- Oracle自动性能统计
- 【Sublime】Mac下Sublime代码自动换行
- Zend Studio 10 phpFormatter 错误的解决
- python猜积木_Python中乐高积木——函数
- Python模拟登陆CSDN
- 一次关于聚合根的激烈讨论
- IOS 如何让你的应用快速兼容iPhone5
- 多糖类水凝胶构建制备介绍(瑞禧多糖水凝胶简述)
- 常用项目文档目录示例
- 一些wincap函数说明
- 终于不用早起抢菜了?GitHub 买菜插件出世开源了!
- 适合新手的网站建设方案
- linux查看当前网卡网速,Linux环境编程:获取网卡的实时网速
- igraph基本用法
- 2021前端面试经典计算题总结。
- 国家档案局发布第13号令《机关档案管理规定》
- arduino笔记20:红外遥控
- 安装和配置Apache + mongrel cluster
- 移动安全:APK的基础结构
热门文章
- keepalived 高可用日志说明及实战配置日志路径
- ftp部署一个可供centos6、centos7系统使用的yum网络仓库
- Linux修改/etc/profile配置错误command is not found自救方法
- F - 等式(1/x + 1/y = 1/n)
- Jquery ajax 返回string类型加result.d原因
- 如何预防服务器宕机:防患于未然
- MYSQL 类ORACLE序列实现遇到的问题
- 提升tomcat服务器性能的七条经验
- [转载] 晓说——第18期:古代科举考试那些事——招生
- python学习干货教程(5):#!/usr/bin/python