使用堆得自动排序功能,维护一个大小为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; }