补全:只留 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 编译。)