【问题标题】:Write a function given a zero-indexed matrix A consisting of N rows and M columns of integers, returns the number of equilibrium points of matrix A给定一个由 N 行和 M 列整数组成的零索引矩阵 A,编写一个函数,返回矩阵 A 的平衡点数
【发布时间】:2019-06-23 15:35:24
【问题描述】:

大家好,我正在做一个问题,我必须在 N x M 行的矩阵 A 中找到一个点,这样

点上方的行之和等于行之和

考虑这个例子

/**
 * A[0][0] = 2    A[0][1] = 7    A[0][2] =  5
 * A[1][0] = 3    A[1][1] = 1    A[1][2] =  1
 * A[2][0] = 2    A[2][1] = 1    A[2][2] = -7
 * A[3][0] = 0    A[3][1] = 2    A[3][2] =  1
 * A[4][0] = 1    A[4][1] = 6    A[4][2] =  8
 * @param matrix
 * @return
 */

在这个例子中,如果我们看点 A[1][1],可以说上面的行 (sum = 14) 等于该点下面的行之和。谁能帮我解决这个问题?

【问题讨论】:

  • 您至少应该尝试编写一些代码来解决您的问题,如果它不起作用,请将其编辑到问题中。
  • 那么,既然你只看行,那么有三个平衡点?

标签: python matrix


【解决方案1】:

导入 java.util.Arrays;

导入 org.slf4j.Logger; 导入 org.slf4j.LoggerFactory;

公共类 Equilibrium {

private static Logger log = LoggerFactory.getLogger(Equilibrium.class);
public static void main(String[] args) {
    int[][] A = new int[][] { 
        { 2, 7, 5 }, 
        { 3, 1, 1 }, 
        { 2, 1, -7 },
        { 0, 2, 1 }, 
        { 1, 6, 8 } };
}

private static int solution(int[][] A) {
    
    int[] row = new int[A.length];
    int[] column = new int[A[0].length];
    int equiRow = 0;
    int equiColumn = 0;

    int position = 0;
    int num = 0;
    for (int i = 0; i < row.length; i++) {
        for (int j = 0; j < column.length; j++) {
            num += A[i][j];
        }
        row[position++] = num;
        num = 0;
    }
    position = 0;
    for (int i = 0; i < column.length; i++) {
        for (int j = 0; j < row.length; j++) {
            num += A[j][i];
        }
        column[position++] = num;
        num = 0;
    }       
    
    for (int i = 0; i < row.length; i++) {
        int leftsum = 0; 
        int rightsum = 0; /
        
        for (int j = 0; j < i; j++) { 
            leftsum += row[j];
        }
        
        for (int k = i + 1; k < row.length; k++) { 
            rightsum += row[k];
        }
        
        
        if (leftsum == rightsum) {
            equiRow++;              
        }
    }
    
    
    for (int i = 0; i < column.length; i++) {
        int leftsum = 0; 
        int rightsum = 0; 
        
        for (int j = 0; j < i; j++) { 
            leftsum += column[j];
        }
        
        for (int k = i + 1; k < column.length; k++) { 
            rightsum += column[k];
        }
        
        
        if (leftsum == rightsum) {
            equiColumn++;               
        }
    }
    return equiRow * equiColumn;
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多