如何让递归函数返回二维数组目标最小值的首个索引?
如何修改递归函数以获取二维数组中按多列比较的最小值的行索引
看起来你已经实现了一个递归函数来找到符合规则的最小值(当第一列有多个最小值时,自动比较下一列直到找到更小的),但现在需要获取这个值对应的行索引,而不是值本身。我来帮你调整这个逻辑:
问题分析
你原来的函数有两个小问题:
- 返回的是值而非索引,无法直接定位到目标行;
- 递归中对
k的修改是值传递,上层调用的k不会被同步更新,导致多列比较的逻辑可能不符合预期。
解决方案:修改递归函数返回行索引
我们可以把递归函数的返回值从「最小值」改成「最小行的索引」,在递归过程中逐列对比当前行和之前找到的最小行,最终返回符合规则的行索引。
修改后的递归函数
public int findMinRowIndex(int[][] array, int n, int k) { // 基准情况:只剩第一行,直接返回它的索引0 if (n == 1) { return 0; } // 递归获取前n-1行中符合规则的最小行索引 int minIndex = findMinRowIndex(array, n - 1, k); int currentRow = n - 1; // 从第k列开始逐列对比两个行,直到找到差异或列数用尽 while (k < array[0].length) { int minRowVal = array[minIndex][k]; int currentRowVal = array[currentRow][k]; if (minRowVal < currentRowVal) { // 之前找到的行更小,返回它的索引 return minIndex; } else if (minRowVal > currentRowVal) { // 当前行更小,返回当前行的索引 return currentRow; } else { // 当前列值相等,继续比较下一列 k++; } } // 如果所有列都完全相等,返回先出现的行(前n-1行里的索引) return minIndex; }
调用示例
// 假设array是你的二维数组,array.length是总行数 int minRowIndex = sortMyArray.findMinRowIndex(array, array.length, 0); int minValue = array[minRowIndex][0]; // 可以从目标行获取对应的值 System.out.println("Min value: " + minValue); System.out.println("Min value is at row index: " + minRowIndex);
逻辑说明
- 递归的核心是每次缩小问题规模:先找到前
n-1行的最小行索引,再和第n-1行做对比; - 逐列对比时,只要某一列出现差异,就直接返回更小值对应的行索引;
- 如果所有列都相等,返回先出现的行(也就是前
n-1行中的索引),符合「首个索引」的需求; - 这里的
k在当前递归层级的while循环中递增,避免了值传递导致的逻辑错误。
内容的提问来源于stack exchange,提问作者Shaghayegh Tavakoli
相关产品推荐
相关产品推荐

