输入n个正整数,找出第k大的数C++
时间: 2024-09-28 20:04:10 浏览: 83
在C++中,要找出给定一组正整数中的第k大数,可以使用优先队列(堆数据结构)来实现。这里是一个基于这个思路的简单示例:
```cpp
#include <iostream>
#include <queue>
using namespace std;
int findKthLargest(int arr[], int n, int k) {
priority_queue<int, vector<int>, greater<int>> pq; // 使用最小堆
for (int i = 0; i < n; ++i) {
pq.push(arr[i]);
if (pq.size() > k) {
pq.pop(); // 如果堆元素超过k,弹出最小的
}
}
// 当前堆顶就是第k大的数
return pq.top();
}
int main() {
int arr[] = {3, 2, 1, 5, 6, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 2;
cout << "The " << k << "th largest number is: " << findKthLargest(arr, n, k) << endl;
return 0;
}
```
在这个程序中,我们首先创建了一个最小堆`pq`。遍历输入数组`arr`,将每个元素推入堆中。如果堆的大小超过了k,我们就弹出堆顶的元素,因为它是最小的。当所有元素都处理完后,堆顶元素即为第k大的数。
阅读全文