/*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个数相关推荐

  1. 如何从100万个数中找出最大的前100个数

    1.  算法如下:根据快速排序划分的思想  (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数  (2) 对(b,d]重复(1)操作,直到最右边 ...

  2. 从100万个数中找出最大的前100个数

    https://blog.csdn.net/cslbupt/article/details/65935577 1.算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个 ...

  3. 从10亿个数字中找出最大的前100个数

    先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...

  4. 从一亿个数中找出最大的一万个数或最小的一万个数

    1 从一亿个数中找出最大的一万个数:(前10000个元素构建最小堆,后续元素与根节点比较,大于放进去,小于或等于不处理) 用前一万个数初始化一个固定大小为10000的最小堆,这时根节点是这10000个 ...

  5. 海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)

    在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数.必须在海量的文章中取出点击量最大的10篇文章. 此类问题其实就是Top K问题. 给定一个数据(数据量海量 N),想找到前 K ...

  6. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)

    海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...

  7. 10亿个数中找出最大的10000个数

    转载自  海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...

  8. 10亿个数中找出最大的10000个数之top K问题

    方法一.先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10 ...

  9. 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)

    top K问题 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热 ...

最新文章

  1. mongoose的populate
  2. Oracle自动性能统计
  3. 【Sublime】Mac下Sublime代码自动换行
  4. Zend Studio 10 phpFormatter 错误的解决
  5. python猜积木_Python中乐高积木——函数
  6. Python模拟登陆CSDN
  7. 一次关于聚合根的激烈讨论
  8. IOS 如何让你的应用快速兼容iPhone5
  9. 多糖类水凝胶构建制备介绍(瑞禧多糖水凝胶简述)
  10. 常用项目文档目录示例
  11. 一些wincap函数说明
  12. 终于不用早起抢菜了?GitHub 买菜插件出世开源了!
  13. 适合新手的网站建设方案
  14. linux查看当前网卡网速,Linux环境编程:获取网卡的实时网速
  15. igraph基本用法
  16. 2021前端面试经典计算题总结。
  17. 国家档案局发布第13号令《机关档案管理规定》
  18. arduino笔记20:红外遥控
  19. 安装和配置Apache + mongrel cluster
  20. 移动安全:APK的基础结构

热门文章

  1. keepalived 高可用日志说明及实战配置日志路径
  2. ftp部署一个可供centos6、centos7系统使用的yum网络仓库
  3. Linux修改/etc/profile配置错误command is not found自救方法
  4. F - 等式(1/x + 1/y = 1/n)
  5. Jquery ajax 返回string类型加result.d原因
  6. 如何预防服务器宕机:防患于未然
  7. MYSQL 类ORACLE序列实现遇到的问题
  8. 提升tomcat服务器性能的七条经验
  9. [转载] 晓说——第18期:古代科举考试那些事——招生
  10. python学习干货教程(5):#!/usr/bin/python