使用堆得自动排序功能,维护一个大小为k的最大堆。
最终输出k个数即为最小k个数。
如果是求最大k个数,那么就使用最小堆。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m, k;
for (; cin >> m >> k;) {
vector<int> nums;
for (; m--;) {
int x;
cin >> x;
nums.push_back(x);
}
priority_queue<int> mxheap;
for (int i = 0; i < nums.size(); i++) {
mxheap.push(nums[i]);
for (; mxheap.size() > k; )
mxheap.pop();
}
vector<int> res;
for (; mxheap.size(); mxheap.pop())
res.push_back(mxheap.top());
for (int i = res.size() - 1; i >=0; i--)
cout << res[i] << ' ';
cout << endl;
}
return 0;
} 
京公网安备 11010502036488号