假设我们有两个矩阵A和B,我们必须找到AB的结果。我们可以假设A的列号等于B的行号。
因此,如果输入像[[1,0,0],[-1,0,3]] [[7,0,0],[0,0,0],[0,0,1]] ,100
-103
700
000
001
那么输出将是[[7,0,0],[-7,0,3]]700
-703
为了解决这个问题,我们将遵循以下步骤-r1:= A的大小,r2:= B的大小
c1:= A [0]的大小,c2:= B [0]的大小
定义顺序为r1 x c2的一个2D数组ret
定义成对的数组sparseA [r1]
对于初始化i:= 0,当i
在sparseA [i]的末尾插入{j,A [i,j]}
对于初始化j:= 0,当j
对于初始化i:= 0,当i
ret [i,k]:= ret [i,k] + sparseA [i,j] * B [x,k]的第二个元素
x:= sparseA [i,j]的第一个元素
如果B [x,k]不等于0,则-
对于初始化j:= 0,当j
返回ret
例
让我们看下面的实现以更好地理解-class Solution {
public:
vector multiply(vector& A, vector& B) {
int r1 = A.size();
int r2 = B.size();
int c1 = A[0].size();
int c2 = B[0].size();
vector ret(r1, vector
vector > sparseA[r1];
for(int i = 0; i
for(int j = 0; j
if(A[i][j] != 0)sparseA[i].push_back({j, A[i][j]});
}
}
for(int i = 0; i
for(int j = 0; j
for(int k = 0; k
int x = sparseA[i][j].first;
if(B[x][k] != 0){
ret[i][k] += sparseA[i][j].second * B[x][k];
}
}
}
}
return ret;
}
};
输入值{{1,0,0},{-1,0,3}},{{7,0,0},{0,0,0},{0,0,1}}
输出结果[[7, 0, 0, ],[-7, 0, 3, ],]