解决了下面提到的问题,这是解决这个问题的蛮力方式。任何人都可以帮我找到更好的解决方案。它需要返回索引,所以我使用String作为返回类型,这里也是在返回索引的情况下需要一些改进。
public class FindNonNegativeAxisIndex {
public static String getAxisIndex(int arr[][], int row, int col) {
int rowCount = 0;
int colCount = 0;
if (row == 0 && col == 0)
return null;
for (int i = 0; i < row; i++) {
rowCount = 0;
colCount = 0;
for (int j = 0; j < col; j++) {
if (arr[i][j] > 0) {
for (int k = 0; k < row; k++) {
if (arr[k][j] > 0)
rowCount++;
}
for (int l = 0; l < col; l++) {
if (arr[i][l] > 0)
colCount++;
}
if (rowCount == 1 && colCount == 1)
return i + " " + j;
}
}
}
return null;
}
public static void main(String[] args) {
int arr[][] = { { 0, 0, 3, 0 }, { 0, 1, 0, 0 }, { 0, 0, 2, 4 },
{ 5, 0, 0, 0 } };
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
String value = getAxisIndex(arr, 4, 4);
String index[] = value.split(" ");
System.out.println("row " + index[0] + " col " + index[1]);
}
}
答案 0 :(得分:1)
最简单的事情是只检查每一行。我们正在寻找非空值。如果我们只发现一次这样的值,那么我们也检查该列,否则转到下一行。这样,您最多有两个嵌套循环。
另请注意,一旦我们发现当前数字不令人满意,就不需要迭代循环。在这种情况下,我们可以使用break
。最后你不应该创建一个字符串,然后拆分它。最好返回一个自定义对象,但为了简单起见,返回一个双元素int[]
数组是可以的。这是整个代码:
public static int[] getAxisIndex(int arr[][], int row, int col) {
if (row == 0 && col == 0)
return null;
for (int i = 0; i < row; i++) {
int nonNullCol = -1;
for(int j=0; j<col; j++) {
if(arr[i][j] != 0) {
if(nonNullCol == -1) {
nonNullCol = j;
} else {
nonNullCol = -1;
break;
}
}
}
if(nonNullCol != -1) {
for(int ii = 0; ii < row; ii++) {
if(ii != i && arr[ii][nonNullCol] != 0) {
nonNullCol = -1;
break;
}
}
if(nonNullCol != -1)
return new int[] {i, nonNullCol};
}
}
return null;
}
public static void main(String[] args) {
int arr[][] = { { 0, 0, 3, 0 }, { 0, 1, 0, 0 }, { 0, 0, 2, 4 },
{ 5, 0, 0, 0 } };
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
int[] idx = getAxisIndex(arr, 4, 4);
if(idx == null)
System.out.println("Not found");
else
System.out.println("row " + idx[0] + " col " + idx[1]);
}