我正在尝试解决一个问题,我必须找到总和为零的所有子对。 在我的解决方案中,当 sum == 0 时,它进入无限循环。我在这里做错了什么。
function sumZero(data) {
let left = 0;
let right = data.length - 1;
let finalArray = [];
while (left < right) {
let sum = data[left] + data[right];
if (sum === 0) {
finalArray.push([data[left], data[right]]);
} else if (sum > 0) {
right--;
} else {
right++;
}
}
}
答案 0 :(得分:1)
如果 sum==0,则将 finalArray 中的项压入,但不管理左侧或右侧,因此它将永远是相同的项和相同的总和。如果 sum ==0
,则尝试向左增加(左++)答案 1 :(得分:0)
您的主要问题在于:
else if (sum > 0) {
right--;
} else {
right++;
}
您可能想用 right
替换 left
。你得到无限循环的原因是当总和 < 0 时。右边将增加,因此,具有与前一次迭代相同的行为,因此,算法将陷入 right++ 和 right--< 之间的无限循环中/p>