我有以下代码可找到最大值并将值左移:
@Override
public void remove() throws QueueUnderflowException {
int max = 0;
int index = 0;
if (isEmpty()) {
throw new QueueUnderflowException();
} else {
for (int i = 0; i < tailIndex + 1; i++) {
int current = ((PriorityItem<T>) storage[i]).getPriority();
if (current > max) {
max = current;
index = i;
}
}
for (int i = 0; i < tailIndex + 1; i++) {
int current = ((PriorityItem<T>) storage[i]).getPriority();
if (current >= max) {
storage[i] = storage[i + 1];
}
}
tailIndex = tailIndex - 1;
}
}
但是,由于我的if语句仅在元素最大化时对元素进行了一次移位,因此我将如何在不进行任何重复的情况下移位其余值。
这是输入:
[(y, 1), (o, 8), (u, 7), (o, 0)]
所需的输出:
(y, 1), (u, 7), (o, 0)]
当前输出:
[(y, 1), (u, 7), (u, 7)]
答案 0 :(得分:0)
您的第二个循环必须按以下方式简化吗?如果第二个循环中的if检查不正确,则应检查是否应该转移,不再检查优先级值,而只检查索引
for (int i = 0; i < tailIndex + 1; i++) {
if (i >= index) {
storage[i] = storage[i + 1];
}
}
或更简单
for (int i = index; i < tailIndex + 1; i++) {
storage[i] = storage[i + 1];
}