java - 删除最小值后如何基于 "heapify"数组的最小堆?

标签 java arrays heap min-heap

一旦调用了remove min函数,我如何在java中“堆化”基于数组的最小堆(这只是获取索引1处的元素并将其删除,然后用数组中的最后一项替换它)。我很困惑在删除最小值发生后如何将数组再次放入最小堆中。

在堆最小数组中,索引 0 始终保持为空。父索引为 i/2,右子索引为 2i + 1,左子索引为 2i。

任何帮助将不胜感激,谢谢大家!

最佳答案

取出最后一个元素并将其复制到第一个位置。将堆大小减一并对第一个元素调用 heapify()。堆应该自行修复。其复杂度为 O(log n)

Min-Heapify-Down (Array A, int i):
    left ← 2i
    right ← 2i + 1
    smallest ← i

    if left ≤ heap_length[A] and A[left] < A[smallest] then:
        smallest ← left
    if right ≤ heap_length[A] and A[right] < A[smallest] then:
        smallest ← right

    if smallest ≠ i then:
        swap A[i] ↔ A[smallest]
        Min-Heapify-Down(A, smallest)

关于java - 删除最小值后如何基于 "heapify"数组的最小堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671832/

相关文章:

java - 从 JAVA API 获取 Amazon EC2 实例的公共(public) DNS

javascript - 从数组中检索列的有效方法是什么?

java - 对两个数组进行降序排序,一个是double arraylist,一个是string arraylist

java - 堆重载JVM

java - Nodejs通过phoenix和druid连接到hbase

java - 在 postman 中发送 PathVariable @PostMapping

javascript - 获取数组中第 n 个最小的数字位置

algorithm - 二叉堆 : more efficient way for initial build than successive inserts?

c++ - 有 C++ MinMax Heap 实现吗?

java - 如何处理短语查询和术语分组