本文共 822 字,大约阅读时间需要 2 分钟。
题目描述
有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)C++优先队列是优先级高的在队首,定义优先级大小的方式是传入一个算子的参数比较a, b两个东西,返回true则a的优先级<b的优先级。
默认是less算子也就是返回a<b,也就是小的优先级也小,而greater算子返回a>b,小的优先级高。
如果是默认的less算子,值大的优先级高,值大的排到了队头,优先队列大的先出队。
#include#include #include #include using namespace std;int main(void) { priority_queue ,greater >q; // t 个 数组,前 k 个最大元素 int t,k,n,x; cin>> t>>k; for (int i=0;i >n; while (n--) { scanf("%d", &x); if (n<=k) q.push(x); if(q.size() >k) q.pop(); } } int res[k]; for (int i= k-1; i>=0;--i) { res[i] = q.top(),q.pop(); } for (int i=0;i
转载地址:http://quyzi.baihongyu.com/