【题目来源】
https://www.acwing.com/problem/content/3536/
【题目描述】
查找一个长度为 n 的数组中第 k 小的数。
注意,相同大小算一样大,如 2 1 3 4 5 2 中,第三小的数为 3。
【输入格式】
第一行包含整数 n。
第二行包含 n 个整数,表示数组中元素。
第三行包含整数 k。
【输出格式】
输出第 k 小的整数。
数据保证有解。
【数据范围】
1≤k≤n≤1000
数组中元素取值范围 [1,10000]
【输入样例】
6
2 1 3 5 2 2
3
【输出样例】
3
【算法分析】
● 这是一道北京邮电大学考研机试题。
● 本代码利用 STL map 实现。STL map 是一种关联容器,存储键值对,每个键(key value)是唯一的,而值(mapped value)可以重复。构建 STL map 时,无论元素插入顺序如何,STL map 中的元素始终按“键值”自动递增存储。STL map 中的迭代器可理解为“指针”。
● STL map 常用函数如下所示。
https://blog.csdn.net/hnjzsyjyj/article/details/146118701
【算法代码】
#include <bits/stdc++.h>
using namespace std;
map<int,bool> mp;
int n,x,k;
int cnt;
int main() {
cin>>n;
while(n--) {
cin>>x;
mp[x]=true;
}
cin>>k;
for(auto it=mp.begin(); it!=mp.end(); it++) {
cnt++;
if(cnt==k) {
cout<<it->first<<endl;
return 0;
}
}
return 0;
}
/*
in:
6
2 1 3 5 2 2
3
out:
3
*/
【参考文献】
https://www.acwing.com/solution/content/272131/
https://www.acwing.com/solution/content/96026/
https://blog.csdn.net/hnjzsyjyj/article/details/146117096