查找前K大的数
来源:互联网 发布:caxa是什么软件 编辑:程序博客网 时间:2024/05/16 18:05
题目描述如上。
思路:把前k大的都弄到数组最右边,然后对这最右边k个元素排序,再输出
关键 :O(n)时间内实现把前k大的都弄到数组最右边
此处的PPT来源:
如果不小心冒犯了老师的版权,请通知我一下,我里面删除内容。。。
最后贴一下代码:
#include <iostream>#include <algorithm>#include <functional>using namespace std;void findKth(int a[], int s, int e, int k);void swap(int &a, int &b);const int maxn = 100005;int a[maxn];int main() {int n;cin >> n;for(int i = 0; i < n; i++) {cin >> a[i];}int k;cin >> k;findKth(a, 0, n - 1, k);sort(a + n - k, a + n);for(int i = n - 1; i >= n - k; i--) {cout << a[i] << endl;}return 0;}void findKth(int a[], int s, int e, int k) {if(s >= e) {return;}int t = a[s];int i = s;int j = e;while(i != j) {if(i < j && a[j] >= t) {j--;}swap(a[i], a[j]);if(i < j && a[i] <= t) {i++;}swap(a[i], a[j]);}int right = e + 1 - i;if(right == k) {return;} else if(right > k) {findKth(a, i + 1, e, k);} else {findKth(a, s, i - 1, k - right);}}void swap(int &a, int &b) {int temp = a;a = b;b = temp;}
阅读全文
0 0
- 查找前k大的数
- 查找前K大的数
- 寻找前k大的数
- 寻找前k大的数
- 输出前K大的数
- 输出前k大的数
- 输出前k大的数
- 输出前k大的数
- 查找第k大的数
- HDOJ 1280查找前k大的数字
- 求n个数中第k大的数、前K大的数、快速排序
- 求取第K大的数或者前K大的数
- 求一个数组中前K大的数或者第K大的数
- 取数列中前K大的数,partial_sort用法
- C#求数组中前K大的数
- C++实现求数组中前K大的数
- 求一数组前k大的所有数
- 查找数组中第K大的数
- CSS实现垂直居中的常用方法
- Java_基础—File类的判断功能
- 2017年7月20日
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- 数据预处理--数据降维
- 查找前K大的数
- 常用排序算法总结
- android让图片资源保持正圆不变形
- OSI的七层网络结构图和TCP/IP的结构图
- Abandon@
- 【DOS网络命令】-telnet的用法
- js console命令
- chrome jsonview 插件安装后不起作用
- Nginx