赞
踩
7-1 寻找第k小的数 (20 分)
给定若干整数,请设计一个高效的算法,确定第k小的数。
测试数据有多组,处理到文件尾。每组测试数据的第1行输入2个整数n,k(1≤k≤n≤1000000)。第2行输入n个整数,每个数据的取值范围在0到1000000之间。
对于每组测试,输出第k小的数。
- 5 3
- 1 2 2 2 1
- 9 3
- 1 2 3 4 5 6 9 8 7
- 2
- 3
如果提交后超时,请注意需要设计的是高效的算法!如果你初学《数据结构》,暂时设计不出来,请学完相关知识再回头来做。 也可以使用STL之sort、nth_element函数求解。 另外,由于输入数据特别多,为减少输入数据的耗时,建议使用以下的输入外挂函数:
- void scan_d(int &num)
- {
- char in;
- in=getchar();
- while(in<'0'||in>'9') in=getchar();
- num=in-'0';
- while(in=getchar(),in>='0'&&in<='9'){num*=10,num+=in-'0';}
- }
调用方法如下:
- int n;
- scan_d(n);
算法分析:
这道题目没有必要用到给与的函数,第k小的数,只要输入的数据,进行排序后,我们只用输出第k个数即可。
代码实现:
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int n,k;
- while (scanf("%d %d",&n,&k)!=EOF){
- int a[n];
- for(int i=0;i<n;i++)
- {
- scanf("%d",&a[i]);
- }
- sort(a,a+n);
- cout<<a[k-1]<<endl;
- }
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。