求数组相邻元素最大乘积的代码运行报错原因排查
相邻元素最大乘积代码问题排查
现存问题
- 变量作用域错误:
prod在for循环内部通过let声明,属于块级作用域变量,循环外的return语句无法访问,运行时会抛出prod is not defined的引用错误。 - 循环边界越界:循环条件设置为
i < inputArray.length,当i等于数组最后一位索引时,inputArray[i+1]不存在,计算结果会变为NaN,正确循环边界应为i < inputArray.length - 1。 - 最大值逻辑错误:每次循环仅计算当前相邻对的乘积赋值给
prod,未和历史最大值对比,最终只能返回最后一组相邻元素的乘积,不是全局最大值。
修正后代码
function adjacentElementsProduct(inputArray) { // 初始化最大值为第一对相邻元素的乘积 let maxProd = inputArray[0] * inputArray[1]; for(let i = 1; i < inputArray.length - 1; i++){ // 计算当前相邻对乘积,和历史最大值对比更新 let currentProd = inputArray[i] * inputArray[i+1]; maxProd = Math.max(maxProd, currentProd); } return maxProd; }
验证示例
输入inputArray = [3, 6, -2, -5, 7, 3]时,函数返回值为21,符合题目要求。
内容的提问来源于stack exchange,提问作者aya abdelhakeem
相关产品推荐
相关产品推荐

