题目描述
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入描述:
输入有多组数据。 每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
示例1
输入
复制
6 2 1 3 5 2 2 3
输出
复制
3
1、暴力
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n;
int a[1002];
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
sort(a,a+n);
int cnt = 0;
for(int i = 1; i < n ; i++)
{
if(a[i] == a[i-1])
{
cnt++;
for(int j = i; j < n; j++)
{
a[j-1] = a[j];
}
n--;
i--;
}
}
// printf("cnt:%d\n",cnt);
// for(int i = 0; i < n ; i++)
// printf("%d ",a[i]);
int k;
scanf("%d", &k);
printf("%d\n",a[k-1]);
return 0;
}
2、set方法
#include <iostream>
#include <set>
#include <cstdio>
using namespace std;
int main()
{
int n,k,x;
set<int>a;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &x);
a.insert(x);
}
scanf("%d", &k);
int cnt = 0;
set<int>::iterator it;
for(it = a.begin(); it != a.end(); it++)
{
cnt++;
if(cnt == k)
{
printf("%d", *it);break;
}
}
return 0;
}