【发布时间】:2015-08-19 20:34:40
【问题描述】:
我遇到了一个问题
编写一个算法,如果 MxN 矩阵中的一个元素为 0,则其整个行和列都设置为 0。
我是 java 新手,所以我的代码可能看起来不太好。请随时向我建议如何使其更好和优化。
我在输出中看到的是:
0 0 0 0
0 0 0 0
代替:
0 0 0 0
1 0 3 4
这是我正在使用的代码:
public static void main(String[] args) {
int rows=2, cols=4;
int[][] arr = { {1,0,2,3}, {1,2,3,4} };
print(arr, rows, cols);
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
if(arr[i][j] == 0){
for(int t1=0; t1<cols; t1++){
arr[i][t1]=0;
}
for(int t1=0; t1<rows; t1++){
arr[t1][j]=0;
}
}
print(arr, rows,cols);
}
}
}
private static void print(int[][]arr, int rows, int cols) {
for(int i=0; i<rows; i++){
for(int j=0; j<cols; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println("\n");
}
System.out.println("-----------------------");
}
我无法确定我的逻辑中的错误。有人可以帮我找出问题所在吗?
【问题讨论】:
-
由于您的代码对您有效,因此这可能更适合代码审查 (codereview.stackexchange.com) Stack Exchange,这是一个用于寻求对您的代码进行同行审查的问答网站。我们正在共同努力,通过改进工作代码来提高全球程序员的技能。
-
首先,创建一个接受数组并返回结果的方法(尽管这是一个需要向面试官澄清的问题——他们是否希望您修改原始数组,或者正在返回一个新的好吗?)。当他们问这样的问题时,他们想看看你的方法,他们可能会建议你优化它。例如,你的算法思路是 O(n^3),我希望有一个很好的 O(n^2) 解决方案。
-
不,我认为您的代码不正确。如果 (0,0) 处的单元格为 0,您的代码将逐步创建一个矩阵,该矩阵以所有单元格均为 0 的矩阵结尾。对吗?所以这不是代码审查或重构的问题。这是一个问题,为什么算法不能正确工作。 ;-)
-
你测试过这段代码吗? “我编写的算法运行良好” - 你对“运行良好”的定义是什么?示例 Matrix 显然创建了错误的输出。