You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用嵌套for循环实现sumArray函数遇测试失败,求排查修正

问题排查与代码修正

核心错误分析

你的代码存在三个关键问题,导致无法通过测试用例:

  • 错误比较对象:代码中i + j === n是将循环索引相加,而非数组元素相加。题目要求的是数组中两个元素的和等于目标值,应该用array[i] + array[j] === n。
  • 过早终止判断:内层循环中只要第一次判断不满足就直接return false,导致函数还没遍历完所有可能的元素组合就终止。比如你的测试用例中,i=0、j=0时不满足条件,函数直接返回false,根本没机会检查到array[0]+array[4] = 2+11=13这个符合条件的组合。
  • 重复冗余检查:内层循环j从0开始会重复检查同一对元素(比如i=0,j=4和i=4,j=0),既浪费性能,还需要额外判断索引是否不同。

修正后的基础版本

这个版本修复了核心错误,确保遍历所有可能的元素组合:

function sumArray(array, n) {
  for(var i = 0; i < array.length; i++){
    for(var j = 0; j < array.length; j++){
      // 先确保是不同元素,再判断和是否等于目标值
      if(i !== j && array[i] + array[j] === n){
        return true;
      }
    }
  }
  // 所有组合检查完毕后再返回false
  return false;
};

优化版本(推荐)

通过调整内层循环的起始位置,避免重复检查,同时省去索引判断,提升性能:

function sumArray(array, n) {
  for(var i = 0; i < array.length; i++){
    // j从i+1开始,只检查当前元素之后的元素,避免重复组合
    for(var j = i + 1; j < array.length; j++){
      if(array[i] + array[j] === n){
        return true;
      }
    }
  }
  return false;
};

这个优化版本中,j始终大于i,所以array[i]和array[j]必然是两个不同的元素,无需额外判断索引是否相等,同时循环次数减少了一半,效率更高。

内容的提问来源于stack exchange,提问作者Esteban Descouvieres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:18:39