查找子矩阵的最大和3x3 JavaScript
我和matrix一起练习工作,但我被困在这里了。我需要找到子矩阵的最大和查找子矩阵的最大和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。我在此强调具有此总和的子矩阵:
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的更新脚本。