【发布时间】:2013-07-20 16:30:08
【问题描述】:
给定一个看起来像这样的 mxn 矩阵:
1034
1234
3560
需要输出如下内容:
0000
1030
0000
*目标数为0。
这是我的解决方案,但我认为它不是很有效(空间和运行时间我认为是 O(m^2 * n))并且想知道是否有更简单和更有效的方法来做到这一点。如果有,是什么?
int[][] m = { { 1, 0, 3, 4 }, { 1, 2, 3, 4 }, { 3, 5, 6, 0 } };
m = zero(m, 0);
public static int[][] zero(int[][] m, int num) {
int rows = m.length;
int columns = m[0].length;
int [][] myInt = new int[rows][];
for(int i = 0; i < rows; i++){
myInt[i] = m[i].clone();
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (myInt[i][j] == num) {
m[i] = new int[columns];
for(int k = 0; k < rows; k++){
m[k][j] = 0;
}
break;
}
}
}
return m;
}
基本上我先克隆输入矩阵,然后遍历每一行并检查该行是否包含我的目标数字。如果是,那么我将原始矩阵中的整行设置为零。然后我执行另一个循环以将包含目标编号的列设置为零。我在一开始就克隆了矩阵,因此检查总是针对克隆的参考矩阵,而不是每次迭代时修改的参考矩阵。
【问题讨论】:
-
从示例(没有代码)中不清楚您要做什么。
-
对不起,我忘了说我的例子中的目标数是0。所以需要将矩阵中包含0的行和列清零。
-
没有问题,就没有答案。
-
问题是有没有比我发布的更有效的方法来解决这个问题。如果是,那是什么。
标签: java arrays performance matrix