塔子哥面临一个挑战,需要从海量的网络数据中筛选出繁忙时段的数据。考虑到数据规模庞大,塔子哥无法对所有数据进行排序,然后选择前N个最大值作为繁忙时段的数据。聪明的塔子哥想到了使用一个固定大小的优先级队列来筛选数据。为了简化场景,我们将海量网络数据表示为一个正整数集合,并且仅需选择N个最大的正整数作为结果。对于每批输入数据,塔子哥将输出一行结果,将这N个正整数按照顺序拼接成一行字符串进行输出。
给定 M 个数据,每个数据为 A 个重复的 B 。要求每读入一次数据,最多输出当前已读数据中最大的 N 个值。
为了能够快速得到最大的值,我们可以使用大根堆来对数据进行存储。
什么是大根堆?
其学名是优先队列。具体表现形式(或者说我们自己手动模拟的形式)是一颗二叉树,每个结点最多有两个儿子,且对于任意一个结点,都符合:该结点任意儿子的值,都比该结点的值小。因此,堆顶(或者说二叉树的根节点)就是所有数中最大的值。