查找第K大的数
类快排 第一种方法 o(n)
2019.06.08更正错误
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
int s[N];
int partion(int l,int r) {
int tmp = s[l];
int i = l, j = r;
while(i < j) {
while(i < j && s[j] >= tmp) j--;
while(i < j && s[i] <= tmp) i++;
if(i < j) {
swap(s[i], s[j]);
}
}
// now i == j
swap(s[i], s[l]);
return i;
}
void selectKth(int l,int r,int k) {
if(l > r)
return ;
int c = partion(l,r);
if(c == k)
return ;
else if(c < k)
selectKth(c+1,r,k);
else
selectKth(l,c,k);
}
int main()
{
srand(time(NULL));
int n = 10;
int m = 10;
for(int i=1; i<=n; i++)
s[i] = rand() % 15;
int k = 5;
selectKth(1,n,k);
printf("%d\n", s[k]);
sort(s+1,s+11);
printf("%d\n", s[k]);
return 0;
}
第二种方法 用到堆了
大根堆 是arr[i] <= arr[2i+1] && arr[i] <= arr[2i], 因此大根堆的堆顶是最小值,所以排序的话呢,就是从小到大排的...
priority_queue<int> que;
int k = 5;
for(int i=1; i<=n; i++) {
que.push(s[i]);
if(que.size() > k) {
que.pop();
}
}
cout<<que.top()<<endl;
查找第K大的数的更多相关文章
- 基于快速排序思想partition查找第K大的数或者第K小的数。
快速排序 下面是之前实现过的快速排序的代码. function quickSort(a,left,right){ if(left==right)return; let key=partition(a, ...
- POJ 2985 The k-th Largest Group(树状数组 并查集/查找第k大的数)
传送门 The k-th Largest Group Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 8690 Acce ...
- P1049 找第K大的数
题目描述 给定一个无序正整数序列, 以及另一个数n (1<=n<=1000000), 然后以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3 ...
- 查找数组中第k大的数
问题: 查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...
- 寻找第K大的数
在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,解决这个问题的方法很多. 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找 ...
- 《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数
求一组N个数中的第k个最大者,设k=N/2. import java.util.Random; public class K_Max { /** * @param args */ //求第K大的数,保 ...
- 给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数。
题目:给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数. 解题思路: 首先取得数组a的中位数a[aMid],然后在b中二分查找a[aMid],得到b[bMid],b[bSt] ...
- [经典算法题]寻找数组中第K大的数的方法总结
[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...
- 【大杀器】利用划分树秒杀区间内第k大的数
最近看了一道题,大概就是给出一个序列,不断询问其子区间内第k大的数,下面是个截图 绕了一圈没找到中文版题目,if(你是大佬) then 去看截图:else{我来解释:给出一个整数n,和一个整数m,分别 ...
随机推荐
- field_automation源码分析
field_automation主要通过uvm_field_utils_begin和uvm_field_utils_end来加到自己写的class中. uvm_field_utils_begin,在o ...
- QT获取窗口句柄
winId()函数 SendMessage((HWND)(this->dlg->winId()),WM_SEND_MY_MESSAGE,0,0);
- tensorflow tensor 索引
问题: self.q_eval4next: (100,2) ix=[0,1,0,1---0,1](100,1) 我想取q_eval4next[:,idx] #use_doubleQ 切片用!!!! s ...
- poj1741 树上的分治
题意是说给了n个点的树n<=10000,问有多少个点对例如(a,b)他们的之间的距离小于等于k 采用树的分治做 #include <iostream> #include <cs ...
- 排序(Sort)-----冒泡排序
声明:文中动画转载自https://blog.csdn.net/qq_34374664/article/details/79545940 1.冒泡排序简介 冒泡排序(Bubble Sort),又 ...
- OS Tools-GO富集分析工具的使用与解读详细教程
我们的云平台上的GO富集分析工具,需要输入的文件表格和参数很简单,但很多同学都不明白其中的原理与结果解读,这个帖子就跟大家详细解释~ 一.GO富集介绍: Gene Ontology(简称G ...
- jack welch:“你们知道了,但是我们做到了”
一.我们发现,只要我们敢于相信自己,敢于朝着那些看似不可能的目标不懈努力,最终会如愿以偿,个人的领袖形象也将因此而确立. 二.一个领导者必须要有魄力.对我来说,这就是一个人能否领导一项业务的分水岭. ...
- Linux基础命令---ifcfg
ifcfg ifcfg是一个简单的脚本替换iconfig命令,它可以设置网络接口的ip地址. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedo ...
- Linux基础命令---uniq
uniq 将文件中重复出现的行删除,结果送到标准输出或者指定文件.在使用uniq指令之前,必须使用sort对内容进行排序,否则没有效果.如果没有选项,则将匹配的行合并到第一个匹配项. 此命令的适用范围 ...
- @Transactional noRollbackFor
网上查资料看的也是云里雾里的. 比如说: @Transactional(noRollbackFor=ProcessException.class) 那他是什么意思呢? 一句话,在你声明的这个事物里如果 ...