给定一组无序的整数数组 nums 和一个整数 k,要找到数组中第 k 大的数,可以采用多种算法。其中一种常见的方法是使用优先队列(堆数据结构),例如最小堆用c++怎么写
时间: 2024-09-13 08:13:56 浏览: 53
乘积最大子数组.md
在C++中,你可以使用STL库中的`priority_queue`(最小堆)来实现这个算法。以下是基本的步骤:
```cpp
#include <vector>
#include <queue>
int findKthLargest(std::vector<int>& nums, int k) {
// 使用优先队列保存前k-1个最大的数
std::priority_queue<int, std::vector<int>, greater<int>> pq;
for (int num : nums) {
// 如果队列未满,直接入队
if (pq.size() < k - 1) {
pq.push(num);
} else if (num > pq.top()) { // 如果当前数比队头大,需要替换队头
pq.pop(); // 弹出最小的数
pq.push(num); // 插入新的数
}
}
// 最后堆顶的数就是第k大的数
return pq.top();
}
```
上面的函数首先创建了一个优先队列,并通过循环遍历数组。每次迭代都会检查当前数是否应该加入队列,如果队列已满并且当前数更大,则弹出队头并插入新数。最后返回堆顶元素即为第 `k` 大的数。
阅读全文