题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入输出格式
输入描述:
输入有多组数据。 每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
输入输出样例
输入样例:
6 2 1 3 5 2 2 3
输出样例:
3
题目来源:
北京邮电大学上机题
思路①:利用set容器去重
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
while (cin >>n) {
set<int> s;
for(int i=0;i<n;i++){
int x;
cin>>x;
s.insert(x);
}
int k;
cin>>k;
int count=0;
for(set<int>::iterator it = s.begin(); it != s.end(); it++){
count++;
if(count==k){
cout << *it <<endl;
break;
}
}
}
return 0;
}
思路②:map映射
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,x,k,count;
while(cin>>n){
count = 0;
map<int,int> mp;//定义map
for(int i=0;i<n;i++){
cin>>x;
mp[x]++;//建立映射
}
cin>>k;
for(int i =0;i<mp.size();i++){
if(mp[i]>0) count++;//count用来计数
if(count==k) {
cout<<i;
break;
}
}
}
return 0;
}