#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
vector<int> findKLargest(vector<int>& nums, int k) {
// 使用最小堆
priority_queue<int, vector<int>, greater<int>> pq;
// 将前k个元素放入堆中
for (int i = 0; i < k && i < nums.size(); i++) {
pq.push(nums[i]);
}
// 对于剩余的元素,如果大于堆顶元素,则替换堆顶元素
for (int i = k; i < nums.size(); i++) {
if (nums[i] > pq.top()) {
pq.pop();
pq.push(nums[i]);
}
}
// 将堆中的元素放入结果向量
vector<int> result;
while (!pq.empty()) {
result.push_back(pq.top());
pq.pop();
}
// 返回结果
return result;
}
int main() {
vector<int> nums = {3, 2, 1, 5, 6, 4};
int k = 2;
vector<int> result = findKLargest(nums, k);
cout << "最大的 " << k << " 个元素是:";
for (int num : result) {
cout << num << " ";
}
cout << endl;
return 0;
}
使用简单的堆排序算法