1st round, 311 Sparse Matrix Multiplication

来源:互联网 发布:电子商务网络环境 编辑:程序博客网 时间:2024/06/06 13:24

public class Solution {    public int[][] multiply(int[][] A, int[][] B) {        int m = A.length;        int n = A[0].length;        int p = B[0].length;        int[][] result = new int[m][p];        for(int i=0; i<m; i++){            for(int j=0; j<n; j++){                if(A[i][j]!=0){                    for(int k=0; k<p; k++){                        if(B[j][k]!=0) result[i][k]+=A[i][j]*B[j][k];                    }                }            }        }        return result;    }            // 最直接的方法,就是按照矩阵的原始算法来求解。。。还是3层循环,先定了i,j层,也就是result[i][j]的位置,然后把k从0到A[0].length遍历一遍,相乘各项,在相加。。。这里我只是check了一下两项是否为0,只有都不为0,才相乘再相加。。。但对于时间复杂度的影响不大。还是N的三次方。。。                // 方法也可以通过,但是非常慢,5%,然后看到一个大大的波峰在前面。。。        //int[] default= new int[0]; !!! 不能把initiate一个 0大小的数组!!!特别是在要return int[][]的时候要注意。。        //if(A==null || B==null || A.length==0 || A[0].length==0 || B.length==0 || B[0].length==0 ) return default;        /*        int m=A.length;        int n=A[0].length;        int p=B[0].length;        int[][] result= new int[m][p];                for(int i=0; i<m; i++){            for(int j=0; j<p; j++){                int tmp=0;                        for(int k=0; k<n; k++){                    if(A[i][k]!=0 && B[k][j]!=0) tmp+= A[i][k]*B[k][j];                }                result[i][j]=tmp;            }        }        return result;*/   }





0 0