补全:只留 K 个的小根堆

补全:从一串数里找最大的 3 个。用一个小根堆,堆里多于 3 个就把最小的弹掉。最后从大到小输出,用 / 拼起来。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:第 2 小用大根堆

补全:求一串数里第 2 小的数。用一个只留 2 个元素的大根堆,最后堆顶就是答案。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

补全:lambda 比较器

补全 lambda 比较器 cmp:按个位数从小到大出队。把五个数依次弹出,用 / 拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

乱序数组怎么建堆最快

第 1 步:乱序:17 24 15 13 23 第 2 步:叶子本身就是小堆,跳过 第 3 步:先沉下标 1:24 不用动 第 4 步:再沉下标 0:17 换 24 第 5 步:17 继续沉,换 23 第 6 步:建好了:24 23 15

开始练习 →

为什么要从后往前(C++)

建堆必须从后往前做,因为【0】。

开始练习 →

长度 9 时最后的非叶子在哪

一个长度为 9 的数组当堆,最后一个有孩子的节点下标是【0】。

开始练习 →

建完堆之后堆顶是几

把乱序数组 17、24、15、13、23 就地整理成大顶堆。运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #in

开始练习 →

先把下沉写出来

补全 sift_down(建堆全靠它)。把 {13, 24, 15} 的 0 号位置下沉一次,输出下沉后的第一个。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

写一个建堆

补全 build_heap:从最后一个有孩子的节点起倒着依次下沉。补全后输出建好后的堆顶。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

建好之后整个数组长什么样

同一个 build_heap。建完之后把整个数组拼起来输出(用 / 隔开)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →