牛客RunningMedian题解(堆/priority_queue的应用+分析)
发布时间
阅读量:
阅读量
原题链接:https://ac.nowcoder.com/acm/contest/1001/D
解题思路 :构造两个堆,其中up为升序排列,down为降序排列。借助堆结构能够自动排序的特性,在输入数据时,需保证两个堆中的元素数量保持一致(或up堆比down堆多一个)。在最终输出前,应判断元素总数是否为奇数,若为奇数,则多出的那个元素应位于up堆中。随后输出up堆顶部的元素。此方法巧妙地运用了堆的特性 ,通过两个堆分别按照降序与升序的方式进行存储,从而确保在两个堆之间交换的元素始终是当前最大或最小值(即需要输出或已输出的数值),使得在已输入的所有元素(假设总数为N)中,按大小顺序排列时,前N/2个位于down堆内,后N/2+1至N个则存储于up堆内。
有几个关键点 需要特别注意:
①使用cin、cout时应添加加速语句,或者直接采用scanf/printf函数以提升效率
②每次调用子函数之前都必须执行一次初始化操作,并清空两个堆的内容
对于不理解的部分,可以通过代入几组测试样例进行验证(即使阅读完题解后仍存在疑惑,通过实际测试样例也只能对原作者表达敬意)
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
全部评论 (0)
还没有任何评论哟~
