題目描述
查找一個數組的第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;
}