311. Sparse Matrix Multiplicatio

2016-12-16  本文已影响0人  夜皇雪
public class Solution {
    public int[][] multiply(int[][] A, int[][] B) {
        int m=A.length,n=A[0].length,nB=B[0].length;
        int[][] res=new int[m][nB];
        for(int i=0;i<m;i++){
            for(int k=0;k<n;k++){
                if(A[i][k]!=0){
                    for(int j=0;j<nB;j++){
                        if(B[k][j]!=0) res[i][j]+=A[i][k]*B[k][j];
                    }
                }
            }
        }
        return res;
    }
}
public class Solution {
    class Node{
        int x,y;
        Node(int x,int y){
            this.x=x;
            this.y=y;
        }
    }
    public int[][] multiply(int[][] A, int[][] B) {
        int[][] res=new int[A.length][B[0].length];
        List<Node> l1=new ArrayList<>();
        List<Node> l2=new ArrayList<>();
        
        for(int i=0;i<A.length;i++){
            for(int j=0;j<A[0].length;j++){
                if(A[i][j]!=0) l1.add(new Node(i,j));
            }
        }
        for(int i=0;i<B.length;i++){
            for(int j=0;j<B[0].length;j++){
                if(B[i][j]!=0) l2.add(new Node(i,j));
            }
        }
        for(Node nA:l1){
            for(Node nB:l2){
                if(nA.y==nB.x){
                    res[nA.x][nB.y]+=A[nA.x][nA.y]*B[nB.x][nB.y];
                }
            }
        }
        return res;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读