第 k 个最小元素的最大堆与最小堆
Max heap vs Min heap for kth smallest element
我无法理解为什么寻找第 k 个最小元素的解决方案使用最大堆方法。对于第 k 个最大的元素,最小堆方法。使用最小堆来查找第 k 个最小元素不是更有意义吗,因为最小元素总是根元素?所以如果我们想找到第 3 小的元素,那么我们只需删除根节点 2 次,构建堆,然后我们得到第 3 小的元素。在最大堆中,最小的不在根部,那么为什么使用它更好呢?这同样适用于对数组中的数字进行升序或降序排序。我看到大多数人使用最大堆来提升。
其实我们可以同时使用Min堆和Max堆来求第k小的元素:
- 就像你描述的那样,我们可以建立一个最小堆,然后循环提取第k个元素。
或
- 我们可以只用 k 个元素构建最大堆。然后我们只是将其余元素与根进行比较,只用根替换根小于根的元素,因此最大堆总是有 k 个最小元素。
我无法理解为什么寻找第 k 个最小元素的解决方案使用最大堆方法。对于第 k 个最大的元素,最小堆方法。使用最小堆来查找第 k 个最小元素不是更有意义吗,因为最小元素总是根元素?所以如果我们想找到第 3 小的元素,那么我们只需删除根节点 2 次,构建堆,然后我们得到第 3 小的元素。在最大堆中,最小的不在根部,那么为什么使用它更好呢?这同样适用于对数组中的数字进行升序或降序排序。我看到大多数人使用最大堆来提升。
其实我们可以同时使用Min堆和Max堆来求第k小的元素:
- 就像你描述的那样,我们可以建立一个最小堆,然后循环提取第k个元素。
或
- 我们可以只用 k 个元素构建最大堆。然后我们只是将其余元素与根进行比较,只用根替换根小于根的元素,因此最大堆总是有 k 个最小元素。