打印N个数组整体最大的TopK个数

题目描述

有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;
}

 

上一篇:带工作流的管理系统开发实战


下一篇:2020厦门大学845数据结构考研考试范围(大纲)和参考书目