written by dylan

Top K问题

找到数组中最大(最小)的K个数,例如7,6,3,5,2,Top3 的意思就是 找出最小的三个数即为:3,5,2.

解法1

讲数组从小到大进行排序,然后取出前K个数。

(先说最差的一个,为了引出后面的优化解法打铺垫)

解法2

利用堆来求解



所以代码就是在堆排序中做出稍微的修改即可以解决topk的问题.代码如下:

void adjustSort(int a[],int n,int i)
{
int father=i;
int child=2*i+1;while(child<n){if(child<n-1&&a[child]<a[child+1]){child++;}if(a[child]>a[father]){swap(a[child],a[father]);father=child;child=2*father+1;}  else{break;}}
}
void topK(int a[],int k,int n)
{
for(int i=k/2-1;i>=0;i--){adjustSort(a,k,i);}
for(int j=k;j<n;j++)//从第k+1开始进行比较{if(a[j]<a[0]){swap(a[j],a[0]);adjustSort(a,k,0);}}
}
int main()
{
int a[]={9,3,6,4,2};
topK(a,3,sizeof(a)/sizeof(a[0]));
for(int i=0;i<3;i++)
cout<<a[i]<<endl;
}

最优解-(快排+中位数bfprt)
https://blog.csdn.net/xiejitao/article/details/45721913

Top K问题(3种解法)相关推荐

  1. Leetcode 347. Top K Frequent Elements--python1行解法,Java 11ms解法

    题目地址: Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nu ...

  2. 关于leetcode第K个最大元素的几种解法

    对于这一题我使用了最大堆,快速排序,归并排序几种解法来做这一题,速度最快的是归并排序 使用定值的最小堆每次更新数组最后剩下前k个最大元素,而且堆顶就是我们要的第K个元素. 堆排序: import he ...

  3. 密码学——Hill体制密码中已知明文M和密文C求解密钥矩阵K的两种方法之逆矩阵求解法和待定系数求解法

    本文主要解决古典密码中的Hill体制密码在已知明文M和密文C的情况下求解密钥矩阵K的两种方法:①求逆矩阵②待定系数法. 如若不懂Hill体制的古典密码可以参照我上一篇文章密码学--几种典型的古典密码体 ...

  4. 牛客--追债之旅 两种解法

    文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...

  5. 程序员编程艺术:第三章续、Top K算法问题的实现

    程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha.     致谢:微软100题实现组,狂想曲创作组.     时间:2011年05月08日    ...

  6. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

  7. Top K问题系列之三 手写代码

    Top K问题是面试时手写代码的常考题,某些场景下的解法与堆排和快排的关系紧密,所以把它放在堆排后面讲. 关于Top K问题最全的分类总结是在这里(包括海量数据的处理),个人将这些题分成了两类:一类是 ...

  8. 【数据结构】二叉堆、TOP K 问题

    二叉堆.TOP K 问题 堆(Heap) 堆的出现,思考? 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 – ...

  9. 快速排序及TOP K问题

    目录 1.介绍1 2.介绍2 3.介绍3 包括各种排序的空间及时间复杂度 1.介绍1 摘自 https://www.cnblogs.com/itxiaok/archive/2019/02/15/103 ...

最新文章

  1. C++11新特性之defaulted函数
  2. Sql Server 调用DLL
  3. kafka log4j配置
  4. icewm使用心得[转]
  5. c++ 显示图片_飞利浦256P1FR显示器一线直连MacBook使用体验分享
  6. SessionState详解
  7. laravel 关联关系之多态关联
  8. 一文理解JDK静态代理、JDK动态代理、Cglib动态代理
  9. wns服务器没有响应,如何使用 Windows 推送通知服务 (WNS) 进行验证(Windows 运行时应用)...
  10. ubuntu /dev/sda1 contains a file system error …… (initramfs)的问题
  11. 物联网技术对于智慧生活24小时改变
  12. 2016版excel_15个经典Excel技巧,易学易用,收藏备用!
  13. 【机器学习】有监督学习,无监督学习,半监督学习和强化学习
  14. 微信语音技术原理_语音控制智能家居系统的实现过程和技术详解
  15. 一个妹子的后台面试经验总结(蚂蚁金服+美团+携程+滴滴+....)
  16. Slot-Gated Modeling for Joint Slot Filling and Intent Prediction论文笔记
  17. EndNote导入文献出现带有大括号{}乱码的解决办法
  18. AP计算机从绝望到满分-----深圳中学张嘉轩如何说
  19. 密码就快要彻底消失了,没有人怀念它
  20. Linux下代理服务器(proxy)配置

热门文章

  1. 基于SpringMVC框架的理发店管理系统管理系统
  2. CDQ分治解二维偏序
  3. python函数只有被调用才会执行_Python函数
  4. 为什么C++(中文版——感谢waterwalk翻译)
  5. 《Web前端设计与开发-HTML+CSS+JavaScript+HTML 5+jQuery》-漫步时尚广场代码-2
  6. HBuilder攻略之加载大坑,打开软件后居然进不去!一直在加载就是进不去,改了设置还是进不去!!
  7. 阿里云ACE高级认证考试试卷内容范围(云计算架构师)
  8. linux修改主机名(永久)
  9. Oracle 定位跟踪日志
  10. js刷新当前页面方法