堆求专题

C++小顶堆求Topk

C++小顶堆求Topk 求数组中的Topk数字,比如【1、4、6、7、2、9、8、3、5、0】的Top4是【6、7、8、9】。 用小顶堆来实现, 首先用前4个元素新建一个大小为4的小顶堆,堆顶始终保存堆中的最小值。数组中的剩余数字是【2、9、8、3、5、0】然后逐个将剩余数字与堆顶比较,如果大于堆顶,则与堆顶交换,并向下调整堆。最后堆中保存的就是最大的4个数字。 代码如下,MinHeap.

LeetCode:LCP 24. 数字游戏(对顶堆求中位数 Java)

目录 LCP 24. 数字游戏 题目描述: 实现代码与解析: 原理思路: LCP 24. 数字游戏 题目描述:         小扣在秋日市集入口处发现了一个数字游戏。主办方共有 N 个计数器,计数器编号为 0 ~ N-1。每个计数器上分别显示了一个数字,小扣按计数器编号升序将所显示的数字记于数组 nums。每个计数器上有两个按钮,分别可以实现将显示数字加一或减一。小扣每

AtCoder Beginner Contest 127 F - Absolute Minima(对顶堆求动态中位数)

题目链接:F - Absolute Minima (atcoder.jp) 题目大意,给出操作次数Q,完成Q次操作。 共两种操作:         操作1:输入 1 a b ,将 f(x) 替换为 f(x) + | x - a | + b;         操作2:输入 2,找出最小的 x 使得 f(x) 的值最小; 我们可以发现 | x - a | 可以抽象成位置 x 与位置 a