Top K问题(3种解法)
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种解法)相关推荐
- 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 ...
- 关于leetcode第K个最大元素的几种解法
对于这一题我使用了最大堆,快速排序,归并排序几种解法来做这一题,速度最快的是归并排序 使用定值的最小堆每次更新数组最后剩下前k个最大元素,而且堆顶就是我们要的第K个元素. 堆排序: import he ...
- 密码学——Hill体制密码中已知明文M和密文C求解密钥矩阵K的两种方法之逆矩阵求解法和待定系数求解法
本文主要解决古典密码中的Hill体制密码在已知明文M和密文C的情况下求解密钥矩阵K的两种方法:①求逆矩阵②待定系数法. 如若不懂Hill体制的古典密码可以参照我上一篇文章密码学--几种典型的古典密码体 ...
- 牛客--追债之旅 两种解法
文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题
二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...
- Top K问题系列之三 手写代码
Top K问题是面试时手写代码的常考题,某些场景下的解法与堆排和快排的关系紧密,所以把它放在堆排后面讲. 关于Top K问题最全的分类总结是在这里(包括海量数据的处理),个人将这些题分成了两类:一类是 ...
- 【数据结构】二叉堆、TOP K 问题
二叉堆.TOP K 问题 堆(Heap) 堆的出现,思考? 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 – ...
- 快速排序及TOP K问题
目录 1.介绍1 2.介绍2 3.介绍3 包括各种排序的空间及时间复杂度 1.介绍1 摘自 https://www.cnblogs.com/itxiaok/archive/2019/02/15/103 ...
最新文章
- C++11新特性之defaulted函数
- Sql Server 调用DLL
- kafka log4j配置
- icewm使用心得[转]
- c++ 显示图片_飞利浦256P1FR显示器一线直连MacBook使用体验分享
- SessionState详解
- laravel 关联关系之多态关联
- 一文理解JDK静态代理、JDK动态代理、Cglib动态代理
- wns服务器没有响应,如何使用 Windows 推送通知服务 (WNS) 进行验证(Windows 运行时应用)...
- ubuntu /dev/sda1 contains a file system error …… (initramfs)的问题
- 物联网技术对于智慧生活24小时改变
- 2016版excel_15个经典Excel技巧,易学易用,收藏备用!
- 【机器学习】有监督学习,无监督学习,半监督学习和强化学习
- 微信语音技术原理_语音控制智能家居系统的实现过程和技术详解
- 一个妹子的后台面试经验总结(蚂蚁金服+美团+携程+滴滴+....)
- Slot-Gated Modeling for Joint Slot Filling and Intent Prediction论文笔记
- EndNote导入文献出现带有大括号{}乱码的解决办法
- AP计算机从绝望到满分-----深圳中学张嘉轩如何说
- 密码就快要彻底消失了,没有人怀念它
- Linux下代理服务器(proxy)配置
热门文章
- 基于SpringMVC框架的理发店管理系统管理系统
- CDQ分治解二维偏序
- python函数只有被调用才会执行_Python函数
- 为什么C++(中文版——感谢waterwalk翻译)
- 《Web前端设计与开发-HTML+CSS+JavaScript+HTML 5+jQuery》-漫步时尚广场代码-2
- HBuilder攻略之加载大坑,打开软件后居然进不去!一直在加载就是进不去,改了设置还是进不去!!
- 阿里云ACE高级认证考试试卷内容范围(云计算架构师)
- linux修改主机名(永久)
- Oracle 定位跟踪日志
- js刷新当前页面方法