我最近参加了我的计算机科学考试,有一个类似的问题。
有两个最大堆(数组已实现)。您需要想出一个算法来合并这两个最大堆,并创建一个新的max堆(数组已实现)。
这个问题的解决是非常直观的,即:
我在互联网上看到了同样的解决方案。
然而,我写了一个这样的解决方案,我无法反驳自己的。
我的算法
一个新的堆数组,大小为heapArr1.size + heapArr2
例如
Heap1: 12-5 -6-2-3
Heap2: 15-13-4-1-0
我们首先比较15和12。写15。
resultHeap: 15
现在比较13和12
resultHeap: 15-13
比较4和12
resultHeap: 15-13- 12
比较4和5
resultHeap: 15-13- 12 - 4
如果我们继续这样下去
resultHeap: 15 - 13 - 12 -5-6-4-2-3- 0.它也是一个堆。
这个算法正确吗?或者有人能给出反驳数据集?
发布于 2022-05-19 17:26:41
对于同样大小的堆,这可能是一个可能的解决方案。
的右子。
这只是一个花哨的指针操作,它实际上并不是在构建堆,而是利用已经有堆的事实。
对未能更正式地表达这一观点表示歉意。如果你发现有什么问题,请纠正我。这只是一般的想法,并没有考虑具体的实现细节。
https://stackoverflow.com/questions/72307747
复制相似问题