博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
N数组 topK问题 解法
阅读量:3951 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
安装Linux虚拟机绑定IP操作
查看>>
centos7离线安装 mysql
查看>>
mysql学习使用一(查询)
查看>>
Linux 学习之sed命令详解
查看>>
JAVA基础——常用IO使用
查看>>
spring框架pom.xml文件解析
查看>>
代码比较工具DiffMerge的下载和使用
查看>>
linux学习之vim全选,全部复制,全部删除
查看>>
linux 学习之awk命令
查看>>
linux学习之查找文件find,locate,whereis使用
查看>>
JS中$含义及用法
查看>>
web学习之ajax记录
查看>>
解决报错 “build.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
查看>>
linux学习之tr操作符用法
查看>>
shell的dirname $0和readlink用法
查看>>
设计模式——设计模式三大分类以及六大原则
查看>>
Android开发——ListView局部刷新的实现
查看>>
Android开发——ListView的复用机制源码解析
查看>>
Android开发——架构组件LiveData源码解析
查看>>
IDEA常用快捷键整理
查看>>