为什么循环是无限的

时间:2021-05-11 06:04:51

标签: javascript algorithm

我正在尝试解决一个问题,我必须找到总和为零的所有子对。 在我的解决方案中,当 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++;
    }
  }
}

2 个答案:

答案 0 :(得分:1)

如果 sum==0,则将 finalArray 中的项压入,但不管理左侧或右侧,因此它将永远是相同的项和相同的总和。如果 sum ==0

,则尝试向左增加(左++)

答案 1 :(得分:0)

您的主要问题在于:

else if (sum > 0) {
  right--;
} else {
  right++;
}

您可能想用 right 替换 left。你得到无限循环的原因是当总和 < 0 时。右边将增加,因此,具有与前一次迭代相同的行为,因此,算法将陷入 right++ 和 right--< 之间的无限循环中/p>

相关问题