寻找第K大
来源:互联网 发布:软件打包安装工具 编辑:程序博客网 时间:2024/04/27 19:53
Question
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
Algorithm
这题用优先队列解决,优先队列的底层就是堆
先弄清楚什么是大顶堆,小顶堆
- 大顶堆:堆顶元素最大
- 小顶堆:堆顶元素最小
寻找第K大的元素,用小顶堆解决,这样顶端元素是最小的,维持堆中元素个数为K,那么一旦堆中元素个数大于K,最小的在堆顶,pop即可,那么堆中始终是最大的K的数,数组遍历完后,堆顶元素就是第K大的元素。
换个思路,这题也可以用大顶堆,把题目稍微变换一下就是,寻找第num.size()-K+1小的元素。
C++中STL优先队列用法请参照这篇博客:
http://blog.csdn.net/sup_heaven/article/details/8036982
Code
大顶堆实现
class Finder {public: int findKth(vector<int> a, int n, int K) { // write code here priority_queue<int> q; for(int i=0;i<a.size();i++){ q.push(a[i]); if(q.size() > (a.size()-K+1)) q.pop(); } return q.top(); }};
小顶堆实现
class Finder {public: int findKth(vector<int> a, int n, int K) { // write code here priority_queue<int,vector<int>,greater<int>> q; for(int i=0;i<a.size();i++){ q.push(a[i]); if(q.size() > K) q.pop(); } return q.top(); }};
0 0
- 寻找第K大
- 寻找第K大
- 寻找第K大
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大数字问题
- 寻找数组第k大的值
- 寻找第K大的数字
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数字
- [编程题] 寻找第K大
- 网易笔试题 寻找第K大
- 寻找第k大数字(numberk)
- HTTPS-老司机手把手教你SSL证书申购-TrustAsia证书
- 绘制一个可以更改进度的圆弧
- Search a 2D Matrix
- composer之创建自己的包
- C# this.Invoke()的作用与用法
- 寻找第K大
- Java基础回顾--java IO流相关的类的分类和总结 3 【Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类】
- spring和springmvc父子容器的理解
- 克隆二叉树
- 设计模式(五)单例模式
- Android去掉系统状态栏(全屏显示)
- 自定义--进度条昂
- maven 下载 jar 包慢的解决办法
- bzoj 3676: [Apio2014]回文串 manachar+后缀自动机+倍增(回文树)