题目描述
【问题描述】
输入n个整数,找出其中最小的k(k<=n)个不同数。例如输入4,5,1,6,1,7,3,8这8个数字,则最小的4个数字是1,3,4,5。
【输入形式】
每个测试案例包括2行:
第一行为2个整数n,k(1<=n,k<=200000),表示数组的长度。
第二行包含n个整数,表示这n个数,数组中的数的范围是[0,1000 000 000]。
【输出形式】
对应每个测试案例,输出最小的k个数,并按从小到大顺序打印(如果不存在k个不同的数,则按照实际数量进行输出)。
【样例输入】
8 4
4 5 1 6 2 7 3 8
【样例输出】
1 2 3 4
代码
#include <iostream>
#include <set>
using namespace std;
struct Number{
long long num;
Number(long long x) {
num = x;
}
bool operator <(const Number & l) const {
if(l.num != num)
return l.num > num;
return false;
}
};
int main(){
long long n, k;
cin >> n >> k;
set<Number> mink;
for(long long i = 0; i < n; i++){
long long t;
cin >> t;
mink.insert(Number(t));
}
int tag = 0;
for(auto it = mink.begin(); it != mink.end(); it++){
tag++;
cout << it->num << ' ';
if(tag == k) break;
}
return 0;
}
如果对各位看官有帮助不妨留下一个点赞 ̄ω ̄=。