题目链接:
查找第K小数_牛客题霸_牛客网查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692786918857
描述
查找一个数组的第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
思路:
set不会存储重复的元素,且会自动排序(默认从小到大)很适合本题。把所有输入的数字存储到set中,在访问第k个元素就可以了。需要注意的是:set不能通过索引访问,要定义一个迭代器,可以直接将这个迭代器执行第k个元素,然后输出就可以了。
源代码:
#include<iostream>
#include<set>
using namespace std;
int main()
{
int n;
while (cin >> n) {
//set不会存储重复的元素,且会自动排序
set<int> mySet;
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
if (mySet.find(temp) == mySet.end()) {
mySet.insert(temp);
}
}
int k;
cin >> k;
//定义一个访问set的迭代器
set<int>::iterator it = mySet.begin();
//将迭代器移动到第 k 个元素的位置
advance(it, k - 1);
cout << *it << endl;
}
return 0;
}
提交结果: