验一验建出来的是不是堆

补全 check_heap:每个位置和它的孩子比一遍,都不小于就返回 true。拿建好的那个数组来验,输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

用堆求第 K 大怎么做

用大顶堆求第 K 大的值,做法是【0】。

开始练习 →

只要前 K 个不排全序的好处

只求前 K 大而不把整个数组排序,好处是【0】。

开始练习 →

数据特别大时更省的做法

第 1 步:先装前 3 个:顶是最小的 8 第 2 步:26 比顶上的 8 大 第 3 步:换掉 8,重新整理 第 4 步:5 比 12 小:不要 第 5 步:21 比 12 大:换进来 第 6 步:剩下的就是最大的 3 个 8 30 12

开始练习 →

第二大的是几

堆是 24、23、15、13、17。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <ut

开始练习 →

前三大是哪几个

同一个堆。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <utility> #in

开始练习 →

求第 k 大

补全 kth_largest:建堆之后连弹 k 次,返回最后弹出的那个。这次求第 3 大。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

求前 k 大的那一串

补全 top_k:返回前 k 大组成的数组(从大到小)。这次求前 3 大,用 / 拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

大顶堆里最小的在哪

大顶堆的堆顶是最大的,那最小的在哪儿?——只可能在叶子里。补全 min_of_heap:只在叶子那一段里找最小的(长度 n 的堆,叶子是下标 n / 2 到 n - 1)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

优先队列和普通队列差在哪

第 1 步:四个任务,数字是优先级 第 2 步:最急的有两个:都是 5 第 3 步:同级:先来的先处理 第 4 步:接着是后来的那个 5 第 5 步:然后是 2,最后是 1 2 5 1 5 优先队列和普通队列的区别是【0】。

开始练习 →