hihoCoder37周 分治 O(n)第k大数~
来源:互联网 发布:腾讯云怎么解析cn域名 编辑:程序博客网 时间:2024/06/02 19:09
题意 给你无序序列,找第k大的数
思路 直接排序就能过。。。不过为了练练手,就写了个O(n)的算法~很经典~
快排算法是向枢轴两侧递归的去快排,而这里只向一边去快排,当枢轴位置>k,向左快排,反之,向右即可~
#include <iostream>#include <cmath>#include <algorithm>#include <cstdio>using namespace std;int a[1000006];int n,k;int partition(int l,int r){while(l != r){while(a[r] >= a[l] && r > l)r--;if(l == r)break;swap(a[r],a[l]);while(a[l] < a[r] && r > l)l++;if(l < r)swap(a[r],a[l]);}return l;}int findK(int l,int r){int now = partition(l,r);if(k < now)return findK(l,now-1);else if(k > now)return findK(now+1,r);elsereturn a[now];}int main(){scanf("%d%d",&n,&k);k--;for(int i=0;i<n;i++){scanf("%d",&a[i]);}printf("%d\n",findK(0,n-1));return 0;}
0 0
- hihoCoder37周 分治 O(n)第k大数~
- 找第k大数,最坏时间复杂度O(n)
- 分治算法 求第k小元素 O(n) < O(nlog2^n)
- 分治算法--寻找第k大数
- LeetCode4. Median of Two Sorted Arrays(寻找第k小数:分治O(log(n+m)))
- 如何用O(n)时间复杂度查找第k大数的优化算法 C++程序
- 非递归且最坏情况下仍然为O(n)的第K大数程序
- O(N)的时间寻找第K大数——Python
- bfprt算法,中位数的中位数算法,O(n)时间复杂度求解第k大数
- 算法:C++实现O(n)复杂度内查找第K大数
- N个数,求第K大数
- N个数,求第K大数
- N个数,求第K大数
- N个数,求第K大数
- 取n个数中第k大数
- 使用分治法求解数组的第k大数
- O(n)寻找数列第K小
- 强大的随机算法-简洁的O(n)时间复杂度解决查找第k大数问题优化算法
- exFAT格式
- U3D 小球跟随鼠标在地上移动(二)
- 解决 U盘安装Windows Server 2012 R2 报错 Windows 无法打开所需的文件 Sources\install.wim
- poj 2182 Lost Cows
- Oracle to_char函数的使用方法
- hihoCoder37周 分治 O(n)第k大数~
- 2015.3.19三角形类
- 取精华、去糟粕!适合iOS开发者的15大网站推荐
- iOS 笔记之 Block
- 深入理解HTTP协议及原理分析之基础概念篇1
- 预编译语句替换NSLog提高性能
- mysql入门加深入
- 【bzoj 3598】: [Scoi2014]方伯伯的商场之旅
- ubuntu11.04 更新版本(其他的老版本都是相似的)(不能使用apt-get update)