Bootstrap

AcWing 3533:查找第K小数 ← STL map

【题目来源】
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