题目描述:
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
例:
输入
6
2 1 3 5 2 2
3
输出
3
解题思路:
1、用vector
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
int k;
while (cin >> n)
{
vector<int>tmp(n);
for (int i = 0; i < n; i++)
{
int m;
cin >> m;
tmp[i] = m;
}
int k;
cin >> k;
sort(tmp.begin(), tmp.end());//升序排列
for (int i = 1; i < tmp.size(); i++)
{
if (tmp[i] == tmp[i - 1])
{
tmp.erase(tmp.begin() + i);
i--;//删除当前位置值后,下一次该位置为新值,仍要从该位置开始
}
}
cout << tmp[k-1] << endl;
}
return 0;
}
2、用map
#include<iostream>
#include<map>
using namespace std;
int main9()
{
int n;
int k;
while (cin >> n)
{
map<int, int>tmp;
for (int i = 0; i < n; i++)
{
int t;
cin >> t;
tmp[t] = 1;
}
cin >> k;
auto it = tmp.begin();
for (; it != tmp.end()&&k!=1; ++it, --k)//k=1时输出当前map的值
{
}
cout << it->first << endl;
}
return 0;
}
5500

被折叠的 条评论
为什么被折叠?



