JS数组相邻元素最大乘积函数异常:负数数组输出为0的原因
相邻元素最大乘积函数返回0的原因分析与修复
咱们直接点出问题核心:你的函数在输入[-23, 4, -3, 8, -12]时返回0,根源是把answer的初始值设成了0,而这个数组里所有相邻元素的乘积都是负数。
具体原因拆解
先算一下这个输入数组的所有相邻乘积:
-23 * 4 = -924 * -3 = -12-3 * 8 = -248 * -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




