在一个二维数组中找到最小值的第一个索引位置。
对我来说意味着:在一个包含最小元素的整数数组
A[minI][minJ]
中返回
minI
。
现在可以在两个级别(在二维数组中)应用递归,我建议在“行”上进行递归(比较每行的最小值...并存储“行”的索引):
更新:现在使用真正的递归,并仅比较第一列:
public class Q50456760 {
private static final int[][] TEST_A = {{0, 1, 2}, {3, 4, 5}, {6, 7, -1}};
public static void main(String... args) {
System.out.print("Min row index (expected 0): ");
System.out.println(Q50456760.findMinRowIndexIter(TEST_A, Integer.MAX_VALUE));
System.out.print("Recursive: ");
System.out.println(Q50456760.findMinRowIndexRec(TEST_A, 0, Integer.MAX_VALUE, -1));
}
private static int findMinRowIndexIter(int[][] arr, int min) {
int minI = -1;
for (int i = 0; i < arr.length; i++) {
int currMin = findMinIter(arr[i], min);
if (currMin < min) {
min = currMin;
minI = i;
}
}
return minI;
}
private static int findMinRowIndexRec(int[][] arr, int i, int min, int minI) {
int currMin = findMinRec(arr[i], 0, min);
if (currMin < min) {
min = currMin;
minI = i;
}
i++;
if (i < arr.length) {
return findMinRowIndexRec(arr, i, min, minI);
} else {
return minI;
}
}
private static int findMinIter(int[] arr, int min) {
int result = min;
if (arr[0] < min) {
result = arr[0];
}
return result;
}
private static int findMinRec(int[] a, int j, int min) {
if (a[j] < min) {
min = a[j];
}
return min;
}
}
k
列的最小值。只有你本地修改了k
。你是如何调用它的? - Elliott Frisch