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

如何在不使用嵌套循环的情况下生成数组所有数对的和?

问题分析与解决方案

原代码错误原因

你的代码只遍历了数组中相邻的元素对(仅计算arr[i] + arr[i+1]),但题目要求的是所有i<j的不重复数对(每个元素与它之后的所有元素配对),因此输出结果缺失了部分数对的和。

正确实现方案

由于要生成的数对数量为n*(n-1)/2(n为数组长度),这个量级本身是O(n²),因此无法做到严格的线性时间复杂度(O(n))——毕竟结果数组的长度就是O(n²),至少需要O(n²)的时间来生成所有元素。不过可以避免显式的嵌套for循环,用数组方法实现:

方法1:forEach + slice

function sumTwo(arr) {
  const results = [];
  arr.forEach((num, index) => {
    // 遍历当前元素之后的所有元素,计算和并加入结果
    arr.slice(index + 1).forEach(nextNum => {
      results.push(num + nextNum);
    });
  });
  return results;
}

// 测试用例
console.log(sumTwo([5, 1, 3])); // 输出 [6, 8, 4]
console.log(sumTwo([5, 1, 3, 2])); // 输出 [6, 8, 7, 4, 3, 5]

方法2:reduce + map + concat

function sumTwo(arr) {
  return arr.reduce((acc, num, i) => {
    // 将当前元素与后续所有元素的和拼接进结果数组
    return acc.concat(arr.slice(i + 1).map(nextNum => num + nextNum));
  }, []);
}

// 测试用例
console.log(sumTwo([5, 1, 3])); // 输出 [6, 8, 4]
console.log(sumTwo([5, 1, 3, 2])); // 输出 [6, 8, 7, 4, 3, 5]

这两种方法本质上还是O(n²)时间复杂度,但避免了显式的嵌套for循环,符合你“不使用嵌套循环”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:15:13