如何实现数组两两乘积判断及代码调试:含元素和两倍判断需求
问题修复与实现方案
需求二:两两遍历逻辑修复
你的代码存在三个核心问题:
- 循环变量
i未递增,会导致无限循环 j的遍历范围错误,没有处理边界,还会重复计算同一组元素对- 条件判断逻辑完全颠倒:需求是找到任意一对乘积大于总和两倍时返回"true",但你当前逻辑是遇到不满足条件的就直接返回"true"
修复后的完整代码
let arr = [2,2,2,2,4,1]; function SumMultiplier(arr) { // 计算数组总和的两倍 const totalSum = arr.reduce((acc, item) => acc + item, 0); const doubleSum = totalSum * 2; const len = arr.length; // 遍历所有不重复的两两元素组合 for (let i = 0; i < len; i++) { // j 从 i+1 开始,避免重复计算(比如i=0,j=1和i=1,j=0是同一对) for (let j = i + 1; j < len; j++) { const product = arr[i] * arr[j]; // 找到符合条件的元素对,立即返回"true" if (product > doubleSum) { return "true"; } } } // 遍历完所有组合都未找到符合条件的,返回"false" return "false"; } // 测试调用 console.log(SumMultiplier(arr)); // 输出 "false"(当前数组最大乘积为4*2=8,小于总和13的两倍26)
需求一:对应实现方案
需求一要求判断数组中是否存在任意两个数的乘积大于26,实现逻辑和需求二类似,仅判断条件不同:
function hasProductExceed26(arr) { const len = arr.length; for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) { if (arr[i] * arr[j] > 26) { return true; } } } return false; } // 测试示例 console.log(hasProductExceed26([3, 4, 5])); // false console.log(hasProductExceed26([5, 6, 2])); // true
内容的提问来源于stack exchange,提问作者vasif mammadov
相关产品推荐
相关产品推荐

