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

JavaScript求长度递减嵌套数组的对角线元素和

计算嵌套数组的对角线元素和(无需三重循环)

首先先明确你生成的嵌套数组outArr结构,帮你梳理清楚问题本质:

[
  [0, 2, 4, 6, 8, 10],
  [0, 2, 4, 6, 8],
  [0, 2, 4, 6],
  [0, 2, 4],
  [0, 2],
  [0]
]

你期望的结果[0,2,6,12,20,30],本质是所有满足x + y = k的outArr[x][y]的和(k从0到5)。这里完全不需要用三重循环,甚至能找到更高效的解法:

最优解法:直接计算原数组的前缀和

仔细观察会发现,outArr[x][y]其实就是intArr[y](每个子数组都是intArr的前N项),而结果的第k项,恰好是intArr从第0项到第k项的累加和——也就是原数组的前缀和数组!

这种解法完全不需要处理嵌套数组,时间复杂度仅为O(n):

const intArr = [0,2,4,6,8,10];
const result = intArr.reduce((acc, curr, idx) => {
  acc.push(idx === 0 ? curr : acc[idx-1] + curr);
  return acc;
}, []);
console.log(result); // 输出: [0,2,6,12,20,30]

如果一定要基于嵌套数组计算(仍无需三重循环)

如果你想操作生成好的outArr,两层循环就足够完成任务:

let outArr = [];
const intArr= [0,2,4,6,8,10];
for (let i = intArr.length; i >0; i--) {
  outArr.push(intArr.slice(0,i));
}

const result = [];
const maxK = outArr.length - 1;

for (let k = 0; k <= maxK; k++) {
  let sum = 0;
  // 遍历所有x从0到k,对应y = k - x
  for (let x = 0; x <= k; x++) {
    sum += outArr[x][k - x];
  }
  result.push(sum);
}

console.log(result); // 输出: [0,2,6,12,20,30]

你也可以用数组方法简化代码,一行完成计算:

const result = Array.from({length: outArr.length}, (_, k) => 
  outArr.slice(0, k+1).reduce((sum, subArr, x) => sum + subArr[k - x], 0)
);

结论

完全不需要使用三重循环,无论是基于原数组的前缀和解法,还是基于嵌套数组的两层循环解法,都能高效得到你想要的结果。其中前缀和解法的效率最高,是最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:25:43