最后一个有孩子的节点在哪

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

开始练习 →

建完堆之后堆顶是几

把乱序数组 17、24、15、13、23 就地整理成大顶堆。运行下面这段程序: def sift_down(h, i, n): while True: big = i l = 2 * i + 1

开始练习 →

先把下沉写出来

补全 sift_down(建堆全靠它)。把 [13, 24, 15] 的 0 号位置下沉一次,输出下沉后的第一个。

开始练习 →

写一个建堆

补全 heapify:从最后一个有孩子的节点起倒着依次下沉。 补全后输出建好后的堆顶。

开始练习 →

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

同一个 heapify。建完之后把整个数组拼起来输出(用 / 隔开)。

开始练习 →

验一验建出来的到底是不是堆

补全 is_heap:每个位置和它的孩子比一遍,都不小于就返回 True。 拿建好的那个数组来验,输出结果。

开始练习 →

求第 K 大,用堆怎么做

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

开始练习 →

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

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

开始练习 →

数据量特别大时更省的做法

一亿条数据里求最大的 10 个,最省内存的做法是【0】。

开始练习 →

第二大的是几

堆是 24、23、15、13、17。运行下面这段程序: def sift_down(h, i, n): while True: big = i l = 2 * i + 1 r = 2

开始练习 →