题目描述
有N个长度不一的数组,所有的数组都是有序的,请从大到小打印这N个数组整体最大的前K个数。
例如,输入含有N行元素的二维数组可以代表N个一维数组。
219, 405, 538, 845, 971
148, 558
52, 99, 348, 691
再输入整数k=5,则打印:
Top 5: 971, 845, 691, 558, 538
[要求]
时间复杂度为O(k \log k)O(klogk),空间复杂度为O(k \log k)O(klogk)
输入描述:
第一行两个整数T, K。分别表示数组个数,需要打印前K大的元素 接下来T行,每行输入格式如下: 开头一个整数N,表示该数组的大小,接下来N个已排好序的数表示数组内的数
输出描述:
从大到小输出输出K个整数,表示前K大。
示例1
输入
3 5 5 219 405 538 845 971 2 148 558 4 52 99 348 691
输出
971 845 691 558 538
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
priority_queue<int, vector<int>, greater<int>> q;
void print(){
if(q.empty())
return ;
int val = q.top();
q.pop();
print();
cout<<val<<" ";
}
int main(){
int t, k;
cin>>t>>k;
int size=0;
for(int i=0;i<t;i++){
int n;
cin>>n;
int e;
for(int i=0;i<n;i++){
cin>>e;
if(size<k){
q.push(e);
size++;
}else{
q.pop();
q.push(e);
}
}
}
print();
cout<<endl;
return 0;
}