题目描述
输入 n(1≤n<5000000 且 nn 为奇数)个数字 (
),输出这些数字的第 k 小的数。最小的数是第 0 小。
请尽量不要使用 nth_element
来写本题,因为本题的重点在于练习分治算法。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
5 1 4 3 2 1 5
输出 #1复制
2
一开始我的代码如下:
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
int a[5000000+10];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
nth_element(a,a+k,a+n);
cout<<a[k]<<endl;
return 0;
}
结果发现超时了。把输入改成用scanf,然后才AC。
AC代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <functional>
using namespace std;
int a[5000000+10];
int main()
{
int n,k;
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
//cin>>a[i];
scanf("%d",&a[i]);
}
nth_element(a,a+k,a+n);
cout<<a[k]<<endl;
return 0;
}