Java 中的好矩阵问题

2025年3月17日 | 阅读 3 分钟

给定一个 N 行 M 列的二维数组 ARR,其中每个元素的值为 0 或 1,将给定的矩阵转换为一个“良好矩阵”。在良好矩阵中,如果一个元素为 0,则其所在行和列的所有元素也应为 0。

例如,如果 arr 是以下矩阵

Find the Good Matrix Problem in Java

输入格式

输入的第一行包含一个整数 T,表示测试用例的数量。对于每个测试用例,第一行包含两个整数 N 和 M,分别表示数组的行数和列数。接下来的 N 行包含 M 个用空格分隔的整数,表示数组 arr 的元素。

Find the Good Matrix Problem in Java

输出格式

对于每个测试用例,返回根据问题描述更新后的矩阵。

算法

  1. 创建一个名为“answer”的二维数组,该数组具有 N 行和 M 列。
  2. 将矩阵 arr 的所有元素复制到数组 answer 中。
  3. 遍历矩阵 arr 中的每个元素。
    • 如果元素 ARR[row][col] 等于 0,则执行以下操作:
      • 将整行所有元素设置为 0,通过迭代索引从 0 到 N-1,并将 answer[index][col] 设置为 0。
      • 将整列所有元素设置为 0,通过迭代索引从 0 到 M-1,并将 answer[row][index] 设置为 0。
  4. 返回矩阵 answer。
  5. 结束程序。

实施

文件名: GoodMatrix.java

输出

0 1 1 0 
0 0 0 0 
0 1 1 0 
0 0 0 0

复杂度分析

时间复杂度:代码遍历给定矩阵中的每个元素,从而产生嵌套循环。外层循环从 0 迭代到 'n - 1',其中 'n' 是行数。其中 'm' 是列数,内层循环从 0 迭代到 'm - 1'。在嵌套循环中,还有用于将行和列的值设置为 0 的附加循环。因此,时间复杂度表示为 O(n * m * (n + m)),其中 n 表示行数,m 表示列数。

空间复杂度:代码创建一个新的二维数组 'answer' 来存储修改后的矩阵。'answer' 数组所需的空间与输入矩阵相同:'n' 行和 'm' 列。因此,空间复杂度为 O(n * m)。