gpt4 book ai didi

java - 堆插入方法中的双项

转载 作者:行者123 更新时间:2023-12-01 17:24:11 25 4
gpt4 key购买 nike

我在将项目添加到二进制堆时看到了奇怪的行为。我添加了三个值:20,31,12。当我检查数组中的项目时,现在有 5 个值:12,20,20,31,12。我无法弄清楚重复项从哪里来。为什么会重复项目?

添加项目:

public void add(int x){     
int hole = heap.size();
heap.add(hole, x);
bubbleUp(hole);
}

bubbleup 方法:

private void bubbleUp(int child) {
int parent;
Bid tmp;

if (child != 0) {
parent = (child-1)/2;
if (heap.get(parent).compareTo(heap.get(child))) {
tmp = heap.get(parent);
heap.add(parent, heap.get(child));
heap.add(child, tmp);
bubbleUp(parent);
}
}
}

最佳答案

这里

heap.add(parent, heap.get(child));
heap.add(child, tmp);

你想要做的是交换元素。 two argument version of add仍然添加一个元素,而不是替换该位置之前的值。

使用set相反。

关于java - 堆插入方法中的双项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com