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

如何从二维数组中找出元素和最大的子数组?

修改方案

你不需要单独存储所有子数组的和,只需要在遍历过程中同时追踪当前最大和以及对应的子数组即可。以下是修改后的代码:

const sumof2dArray = (arr) => {
    // 初始化最大和为第一个子数组的和,对应的子数组为第一个子数组
    let maxSum = arr[0].reduce((acc, curr) => acc + curr, 0);
    let maxSubarray = arr[0];

    // 从第二个子数组开始遍历
    for(let i = 1; i < arr.length; i++){
        // 计算当前子数组的和
        const currentSum = arr[i].reduce((acc, curr) => acc + curr, 0);
        // 如果当前和更大,更新最大和与对应的子数组
        if(currentSum > maxSum){
            maxSum = currentSum;
            maxSubarray = arr[i];
        }
    }
    return maxSubarray;
}

console.log(sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]])); // 输出: [1,3,40]

关键修改点:

  • 去掉了存储所有和的newArr,改用maxSum和maxSubarray两个变量直接追踪目标值
  • 使用Array.reduce()简化子数组求和的代码(你也可以保留原来的嵌套循环求和方式,效果一致)
  • 遍历过程中实时比较当前子数组和与最大和,一旦更大就更新对应的子数组
  • 最终返回的是maxSubarray而非最大和

如果你想保留原来的嵌套循环求和方式,修改后的代码可以是这样:

const sumof2dArray = (arr) => {
    let maxSum = 0;
    let maxSubarray = arr[0];
    // 先计算第一个子数组的和
    for(let j = 0; j < arr[0].length; j++){
        maxSum += arr[0][j];
    }

    for(let i = 1; i < arr.length; i++){
        let currentSum = 0;
        for(let j = 0; j < arr[i].length; j++){
            currentSum += arr[i][j];
        }
        if(currentSum > maxSum){
            maxSum = currentSum;
            maxSubarray = arr[i];
        }
    }
    return maxSubarray;
}

console.log(sumof2dArray([[1,2,3], [4,5,6], [10,11,12], [7,8,9],[1,3,40]])); // 输出: [1,3,40]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:13