O(n)线性时间找第K大,中位数
运用快速排序的思想,可以达到线性时间找到一串数的第K大
#include<cstdio>
#define F(i,a,b) for(int i=a;i<=b;i++) int a[],n;
void swap(int &a,int &b){int c=a;a=b,b=c;} int partition(int *a,int l,int r){
int x=a[l],pos=l;
for(int i=l+;i<=r;i++)
if(a[i]<x)swap(a[++pos],a[i]);
swap(a[l],a[pos]);
return pos;
} int find_k(int *a,int k,int l=,int r=n){
int pos=partition(a,l,r);
int j=pos-l+;
if(l==r)return a[l];
if(k==j)return a[pos];
if(k>j)return find_k(a,k-j,pos+,r);
else return find_k(a,k,l,pos-);
} double findmid(){
if(n&){
int k=(n>>)+;
double ans=find_k(a,k);
return ans;
}else{
int k=n>>;
double ans=find_k(a,k)+find_k(a,k+);
return ans/;
}
} int main(){
scanf("%d",&n);
F(i,,n)scanf("%d",a+i);
printf("mid=%lf\n",findmid());
return ;
}
O(n)线性时间找第K大,中位数的更多相关文章
- O(n)线性时间求解第k大-HDU6040-CSU2078
目录 目录 思路 (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 HDU6040:传送门 \(m(m\leq 100)\)次查询长度为\(n(n \leq 1e7)\)区间的 ...
- 算法导论学习之线性时间求第k小元素+堆思想求前k大元素
对于曾经,假设要我求第k小元素.或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路. 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法. 其详细的分治思 ...
- 找第k大的数
(找第k大的数) 给定一个长度为1,000,000的无序正整数序列,以及另一个数n(1<=n<=1000000),接下来以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{ ...
- 快速排序算法的实现 && 随机生成区间里的数 && O(n)找第k小 && O(nlogk)找前k大
思路:固定一个数,把这个数放到合法的位置,然后左边的数都是比它小,右边的数都是比它大 固定权值选的是第一个数,或者一个随机数 因为固定的是左端点,所以一开始需要在右端点开始,找一个小于权值的数,从左端 ...
- luogu_P1177 【模板】快速排序 (快排和找第k大的数)
[算法] 选取pivot,然后每趟快排用双指针扫描(l,r)区间,交换左指针大于pivot的元素和右指针小于pivot的元素,将区间分成大于pivot和小于pivot的 [注意] 时间复杂度取决于pi ...
- 从一组数找第K大元素
最近做面试题,经常与到一个问题,如何高效的从一组数中找到第K大的元素. 其实我们最容易想到的肯定是蛮力法. 1. 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*l ...
- CSUOJ2078-查找第k大(读入挂)
查找第k大 Submit Page Output 对于每组数据,输出第k大的数 Sample Input 1 6 2 1 2 3 4 5 6 Sample Output 5 Hint #include ...
- log(m+n)找第k大
递归 int find_kth(vector<int>& nums1, int begin1, int size1, vector<int>& nums2, i ...
- P1049 找第K大的数
题目描述 给定一个无序正整数序列, 以及另一个数n (1<=n<=1000000), 然后以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3 ...
随机推荐
- ubuntu 下配置vim for python
apt-get install vim-gnome apt-get install ctags apt-get install vim-scripts vim-addons install tagli ...
- easyui-datagrid加载时的效率低下,解决方案
在360浏览器中 使用easyui datagrid 加载数据是效率低下,有时候会出现卡机. 可以修改easyui源码进行解决.
- HTML之打开/另存为/打印/刷新/查看原文件等按钮的代码
■打开■ <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开> < ...
- Chapter 2 Open Book——4
I walked to Biology with more confidence when, by the end of lunch, he still hadn't showed. 经过中午饭之后我 ...
- gerrit push配置
第一种方法: 在home目录下,编辑.gitconfig文件,添加 [remote "review"] url = ssh://someone@oneip:port/project ...
- hdu_4046_Panda(树状数组)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4046 题意:一大堆篇幅介绍,跳过直奔主题,让你寻找给定区间的“wbw”的个数. 题解:直接上树状数组, ...
- LeetCode OJ 236. Lowest Common Ancestor of a Binary Tree
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- html5结合flash实现视频文件在所有主流浏览器兼容播放
来源:http://blog.csdn.net/freshlover/article/details/7535785/ 由于html5的出现,让网页中的视频.音频有了更加便捷的实现方式.但是video ...
- 被非技术瓶颈阻挡了,没钱买Mac,挣扎ing
最近一直没来写博客,因为一直在找刷盘子.服务生.看店的工. 已经找到,主要因为前阵子天不热,所以酒馆的顾客不多.现在好了. 只好买个Mac mini,看了很多帖子,也只好暂时折中这样了.Mac买不起. ...
- Razor Engine,动态脚本语言,mvc上的语法,适用于文件内容生成,静态网页生成等。
https://razorengine.codeplex.com/ 下载并引用:razorengine.dll 代码里这样写,用mvc的人都会!Razor语法! string template = & ...