You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让递归函数返回二维数组目标最小值的首个索引?

如何修改递归函数以获取二维数组中按多列比较的最小值的行索引

看起来你已经实现了一个递归函数来找到符合规则的最小值(当第一列有多个最小值时,自动比较下一列直到找到更小的),但现在需要获取这个值对应的行索引,而不是值本身。我来帮你调整这个逻辑:

问题分析

你原来的函数有两个小问题:

  1. 返回的是值而非索引,无法直接定位到目标行;
  2. 递归中对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:04:20