问题描述
给定一个长度为N(1<=N<=106)的序列,元素全部为32位无符号整数,要求从中找出第k小的数。
数据保证第k小的数一定存在。约定第1小的整数是序列中的最小元素。
输入
- 第一行输入:两个整数,N和k。
- 第二行输入:序列中的N个整数,用空格分开。
输出
- 输出:第k小的整数
样例
输入样例
5 3
5 2 2 4 4
输出样例
5
AC代码
#include <stdio.h>
#include <algorithm>
using namespace std;
unsigned num[1000010]; //数组长度大于10^6,将其定义为全局变量
int main()
{
int i,k,n,num_count=0;
unsigned number;
scanf("%d",&n);
scanf("%d",&k);
for(i=0;i<n;i++)
scanf("%u",&num[i]);
sort(num,num+n); //排序
number=num[0]-1; //保证number的初始值与num[0]不同
for(i=0;i<n;i++)
{
if(num[i]!=number) //若num[i]与前一个数(number)不同
{
num_count++; //计数
number=num[i]; //更新number
if(num_count==k) break; //找到第k小的数,退出循环
}
}
printf("%u\n",number);
return 0;
}