MST

星途 面试题库

面试题:Java多维数组的复杂操作

假设有一个二维整数数组,代表一个矩阵。请编写一个Java方法,计算该矩阵两条对角线元素之和(主对角线和副对角线),如果对角线长度不一致,忽略较短对角线上多余的元素。请详细说明实现思路以及在处理多维数组时需要注意的要点。
26.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 首先获取矩阵的行数和列数,矩阵的行数和列数决定了对角线的长度。
  2. 初始化两个变量,分别用于存储主对角线和副对角线元素的和。
  3. 使用循环遍历矩阵,对于主对角线,其元素满足行索引和列索引相等(即 matrix[i][i]);对于副对角线,其元素满足行索引和列索引之和等于矩阵边长减 1(即 matrix[i][matrix.length - 1 - i])。
  4. 在遍历过程中,判断矩阵的行数和列数是否相等。如果相等,直接累加对角线元素;如果不相等,需要根据较短对角线的长度来进行累加,避免数组越界。
  5. 最后返回主对角线和副对角线元素之和。

处理多维数组时需要注意的要点

  1. 边界检查:在访问多维数组元素时,要确保索引不越界。例如,在访问 matrix[i][j] 时,i 必须在 0matrix.length - 1 之间,j 必须在 0matrix[i].length - 1 之间。
  2. 数组长度一致性:对于矩阵(二维数组),虽然理论上每行长度可以不同,但如果按对角线处理,最好确保每行长度一致,否则需要额外处理逻辑。
  3. 嵌套循环遍历:通常使用嵌套循环来遍历多维数组,外层循环控制行,内层循环控制列。注意循环变量的范围和更新。

代码实现

public class DiagonalSum {
    public static int diagonalSum(int[][] matrix) {
        int sum = 0;
        int minLength = Math.min(matrix.length, matrix[0].length);
        for (int i = 0; i < minLength; i++) {
            sum += matrix[i][i];
            sum += matrix[i][matrix.length - 1 - i];
        }
        // 如果矩阵是奇数边长,减去中间重复计算的元素
        if (matrix.length % 2 != 0) {
            sum -= matrix[matrix.length / 2][matrix.length / 2];
        }
        return sum;
    }
}

你可以使用以下方式调用这个方法:

public class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        int result = DiagonalSum.diagonalSum(matrix);
        System.out.println("对角线元素之和: " + result);
    }
}