Priority Queue<Integer>=k ,不删除 distance[k] 为 min 的 k
Priority Queue<Integer>=k ,does not remove the k where distance[k] is min
int[] distance = new int[100];
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (distance[o1] > distance[o2] ) {
return -1;
} else if (distance[o1] < distance[o2] ) {
return 1;
}
return 0;
}
});
for (int i = 0; i < 100; i++) {
distance[i] =new Random().nextInt(100)+1;
pq.add(i);
}
distance[10]=0;
int u=pq.poll();
我认为这个比较器应该 return 距离 [k]=MinimumDistance 的元素 k。
无法理解为什么这不起作用..
pq.Poll 它不是基于 distance[] 数组。
例如这里变量 u 应该是 10.
两个问题:你的比较是反的。应该是
if (distance[o1] > distance[o2] ) {
return 1;
} else if (distance[o1] < distance[o2] ) {
return -1;
}
其次,你必须在循环之前设置distance[10]=0,然后不覆盖它。这个比较器只在添加东西时起作用,然后你在位置 10 有一个随机数。
int[] distance = new int[100];
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (distance[o1] > distance[o2] ) {
return -1;
} else if (distance[o1] < distance[o2] ) {
return 1;
}
return 0;
}
});
for (int i = 0; i < 100; i++) {
distance[i] =new Random().nextInt(100)+1;
pq.add(i);
}
distance[10]=0;
int u=pq.poll();
我认为这个比较器应该 return 距离 [k]=MinimumDistance 的元素 k。 无法理解为什么这不起作用.. pq.Poll 它不是基于 distance[] 数组。 例如这里变量 u 应该是 10.
两个问题:你的比较是反的。应该是
if (distance[o1] > distance[o2] ) {
return 1;
} else if (distance[o1] < distance[o2] ) {
return -1;
}
其次,你必须在循环之前设置distance[10]=0,然后不覆盖它。这个比较器只在添加东西时起作用,然后你在位置 10 有一个随机数。