1. 堆简介
1.1 堆是什么?
- 堆是一种特殊的
完全二叉树。
- 所有的节点都大于等于(最大堆)或最小等于(最小堆)它的子节点。
1.2 JS中的堆
- JS中通常用数组表示堆
- 左侧子节点的位置是
2*index + 1 - 右侧子节点的位置是
2*index + 2 - 父节点位置是
(index - 1) / 2
1.3 堆的应用
- 堆能高效、快速地找出最大值和最小值,时间复杂度:O(1)
- 找出第K个最大(小)元素。
1.4 第K个最大元素
- 构建一个最小堆,并将元素依次插入堆中
- 当堆的容量超过K,就删除堆顶
- 插入结束后,堆顶就是第K个最大元素。