Codog

关注微信公众号:Codog代码狗

0%

堆与最大(小)K问题

堆,即完全二叉树,按左右节点顺序填充,可以不完整,但必须按顺序

比如 [1, 2, 3], [1, 2, 3, 4, 5]

最小堆与最大堆:

所有节点的左右子节点都大于等于当前节点的为最小堆,反之,所有节点的左右子节点值都小于等于当前节点值为最大堆。

最小堆:
image

最大堆:
image

最值问题

比如最大的第K个元素

新建大小为K的最小堆,遍历完成后,返回堆顶的元素即位最大的第K个元素(通俗掉就是第K大的元素)。

1
2
3
4
5
6
7
8
Q:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

A:
最小堆,堆大小为k,返回heap.pop()

[3,2,1,5,6,4]. => [5, 6] => 5