给定n个数字,找出前m大的数字。 输入 多组输入,每组输入格式如下。 第一行包含两个整数n m。(n<=100000, m>0) 第二行包含n个正整数。 输出 输出前m大的数字,若m>n输出ERROR。每组输出占一行。
时间: 2024-03-04 10:48:08 浏览: 90
好的,您的问题是如何找出前m大的数字,输入输出格式和约束条件是怎样的。下面是C++代码实现:
```
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main() {
int n, m;
while (cin >> n >> m) {
priority_queue<int, vector<int>, greater<int>> min_heap; // 小根堆
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
if (min_heap.size() < m) {
min_heap.push(num);
} else if (num > min_heap.top()) {
min_heap.pop();
min_heap.push(num);
}
}
if (min_heap.size() < m) {
cout << "ERROR" << endl;
} else {
vector<int> result;
while (!min_heap.empty()) {
result.push_back(min_heap.top());
min_heap.pop();
}
for (int i = result.size() - 1; i >= 0; --i) {
cout << result[i] << " ";
}
cout << endl;
}
}
return 0;
}
```
每次读入一个数字num,如果小根堆的元素个数小于m,就将num加入小根堆中;否则,如果num比小根堆的堆顶元素大,就将堆顶元素弹出,然后将num加入小根堆中。最后,如果小根堆的元素个数小于m,就输出ERROR;否则,将小根堆中的元素弹出,存入一个vector中,然后倒序输出即可。
注意:每次读入输入数据前,要用while(cin >> n >> m)判断是否还有输入数据。
阅读全文