Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找子矩阵的最大和3x3 JavaScript_Javascript_Matrix - Fatal编程技术网

查找子矩阵的最大和3x3 JavaScript

查找子矩阵的最大和3x3 JavaScript,javascript,matrix,Javascript,Matrix,我和matrix一起练习工作,但我被困在这里了。我需要找到子矩阵的最大和 const matrix = [ [ 1, 1, 3, 3, 5], [-6, -7, 2, -3, -1], [ 3, 0, -4, 5, 9], [ 7, -7, 0, 1, 0], [-7, -6, -4, -4, 9], ] 当前矩阵为5x5。我需要找到3x3子矩阵的最大和。这里的最大和是19。我在此强调具有此总和的子矩阵:

我和matrix一起练习工作,但我被困在这里了。我需要找到子矩阵的最大和

const matrix = [ 
    [ 1,  1,  3,  3,  5],
    [-6, -7,  2, -3, -1],
    [ 3,  0, -4,  5,  9],
    [ 7, -7,  0,  1,  0],
    [-7, -6, -4, -4,  9],
]
当前矩阵为5x5。我需要找到3x3子矩阵的最大和。这里的最大和是19。我在此强调具有此总和的子矩阵:

            +----------+
     1   1  |  3  3  5 | 
    -6  -7  |  2 -3 -1 | 
     3   0  | -4  5  9 | 
            +----------+
     7  -7     0  1  0
    -7  -6    -4 -4  9
脚本应该使用更大的矩阵。我需要帮助,我不能让它在每个3x3矩阵上正确迭代

const subLength = 3 * 3;
let maxSum = 0;
for (let subMatrix = 0; subMatrix < subLength; subMatrix++) {
    let sum = 0;
    for (let rows = 0; rows < 3; rows++) {
        for (let cols = subMatrix; cols < matrix.length; cols++) {
            sum += matrix[rows][cols];
        }
    }
    if (maxSum < sum) {
        maxSum = sum;
    }
}
console.log(maxSum);
const subLength=3*3;
设maxSum=0;
对于(让子矩阵=0;子矩阵
代码可以很好地处理该矩阵,但不能处理另一个矩阵。我知道问题出在第三个嵌套循环中,可能是第一个嵌套循环中的某个问题。在第三行中,我必须从0迭代到3,然后从1迭代到(3+1),从(3+2)迭代到第二行的下一个数组,然后再次从零开始


你能修改我的代码吗?

如果你用两个外循环替换你的外循环会更容易:一个用于子矩阵的第一行,另一个用于它的第一列。然后,两个内部循环应该遍历从那里开始的子矩阵的3行3列

以下是您的代码,仅做了少量更改:

函数maxSubSum(矩阵,子长度){
设maxSum=0;

对于(让firstRow=0;firstRow您可以使用
reduce
方法创建一个函数,该方法将col和row参数从原始数组中切片,但对于内部数组,您只需颠倒元素顺序即可

const矩阵=[
[1, 1, 3, 3, 5],
[-6, -7, 2, -3, -1],
[3, 0, -4, 5, 9],
[7, -7, 0, 1, 0],
[-7, -6, -4, -4, 9, 11, 40],
]
函数和(矩阵、行、列){
返回矩阵.切片(0,行).reduce((r,e)=>{
[…e].reverse().slice(0,col).forEach(c=>r+=c)
返回r;
}, 0)
}

log(sum(matrix,3,3))
您可以先得到矩阵的一部分,然后再得到子矩阵的和

const
矩阵=[[1,1,3,3,5],-6,-7,2,-3,-1],[3,0,-4,5,9],[7,-7,0,1,0],-7,-6,-4,-4,9,11,40],
cols=3,
行=3,
左=-3,
top\uu0,//top是windows的保留属性
和=矩阵
.slice(顶部,顶部>=0?行:未定义)
.map(a=>a.slice(左,左>=0?列:未定义))
.reduce((r,a)=>a.reduce((s,v)=>s+v,r),0);

控制台日志(总和)
为什么你的矩阵的最后一行有7个值?谢谢,我修正了它。它适用于12个案例中的9个。3个案例给了我错误的答案并返回0。我可能遗漏了问题中的某些内容。你能检查一下吗?这是我的任务。我有矩阵的大小,我假设矩阵是正方形的,但结果是矩形的。请参阅s的更新脚本。