You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JS数组相邻元素最大乘积函数异常:负数数组输出为0的原因

相邻元素最大乘积函数返回0的原因分析与修复

咱们直接点出问题核心:你的函数在输入[-23, 4, -3, 8, -12]时返回0,根源是answer的初始值设成了0,而这个数组里所有相邻元素的乘积都是负数。

具体原因拆解

先算一下这个输入数组的所有相邻乘积:

  • -23 * 4 = -92
  • 4 * -3 = -12
  • -3 * 8 = -24
  • 8 * -12 = -96

这些结果全是负数,但你的代码第二个循环里,是在比较ansArr[i] > answer——初始answer是0,所有负数都比0小,所以answer根本不会被更新,最后就返回了初始值0。

而且这个问题不止出现在全负数乘积的场景:如果输入数组只有两个负数元素(比如[-5, -2]),乘积是10没问题,但如果是[-5, 2],乘积是-10,你的函数还是会返回0,这显然不符合预期。

修复方案

有两种简单的修复方式,任选其一都能解决问题:

方案1:用第一个相邻乘积初始化answer

跳过初始值0,直接用数组里第一个实际的相邻乘积作为比较起点:

function largestProduct(inputArray) {
  // 用第一个相邻乘积初始化,避免初始值干扰
  let answer = inputArray[0] * inputArray[1];
  // 从第二个相邻对开始遍历
  for(let i = 1; i < inputArray.length - 1; i++){
    const product = inputArray[i] * inputArray[i+1];
    if(product > answer){
      answer = product;
    }
  }
  return answer;
}

方案2:用Math.max()直接取乘积数组的最大值

这种方式更简洁,利用JavaScript内置方法处理最大值计算,不需要手动维护answer变量:

function largestProduct(inputArray) {
  const products = [];
  for(let i = 0; i < inputArray.length - 1; i++){
    products.push(inputArray[i] * inputArray[i+1]);
  }
  // 展开数组元素,直接取最大值
  return Math.max(...products);
}

验证结果

修复后的函数处理[-23, 4, -3, 8, -12]时,会正确返回最大的相邻乘积-12,符合预期。

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

火山引擎 最新活动