【发布时间】:2013-12-22 06:09:05
【问题描述】:
这个问题。在电话采访中被问到我的朋友。
实现一个函数,将索引
i处的元素替换为k,在最小堆中并重新排列堆。
这是我的解决方案,请告诉我是否正确。
解决方案 1:
1)堆[i]=k
2)堆(堆,1)
但这似乎是错误的,因为在这种情况下:
10
/ \
14 59 (<-was 12 before replacing)
.. / \
55 20
所以我们在这里交换(55,59),但仍然会破坏最小堆属性。
解决方案 2:
1)用堆[最后一个索引]替换堆[i]
2) heapify(堆, 1)
3) 现在像往常一样在堆中插入过程
时间复杂度 - O(log N)
它(解决方案 2)是正确的方法吗?如果没有请给一些hints。
【问题讨论】:
-
解决方案 2 是要走的路,imo。它有效并且非常有效。
标签: algorithm data-structures heap