数组中最小数字的索引位置

时间:2019-04-06 16:48:40

标签: java

我对返回数组中最小数字的索引位置有疑问。我从下面提供的5个答案中选出了3个答案。我认为其中之一可能是正确的。但是,我不太了解该代码,因此正在寻找解释它们如何工作的。

A

public int min(int[] a) {
    int min = 0;
    for (int i = 1; i < a.length; i++) {
        if (a[i] <  a[min]) {
            min = i;
        }
    }
    return a[i];
}

B

public int min(int[] a) {
    int min = 0;
    for (int i = 1; i < a.length; i++) {
        if (a[i] <  a[min]) {
            min = i;
        }
    }
    return i;
}

C

public int min(int[] a) {
    int min = 0;
    for (int i = 1; i < a.length; i++) {
        if (a[i] <  a[min]) {
            min = i;
        }
    }
    return min;
}

2 个答案:

答案 0 :(得分:0)

第一个代码将给出错误(索引超出范围的异常),因为在for循环结束时,您的“ i”将等于数组的长度,并且您将返回a [i],因此此解决方案是完全错误的。第二个代码将返回数组的长度,因此这也是错误的解决方案。您输入的第三个代码将返回最小值的索引。因此解决方案是正确的。

答案 1 :(得分:0)

这很简单..您正在寻找最小索引。 想象一下a数组有3个元素。

A

public int min(int[] a) {
    int min = 0;
    for (int i = 1; i < a.length, i++) {
        if (a[i] <  a[min]) {
            min = i;
        }
    }
    return a[i];    //returning value. Wrong!
                    //you are searching for the index, not value isnt' it?
}

B

public int min(int[] a) {
    int min = 0;
    for (int i = 1; i < a.length, i++) {
        if (a[i] <  a[min]) {
            min = i;
        }
    }
    return i;    //returning i which only exist in for-loop scope. Wrong!
}

C

public int min(int[] a) {                   //assume a has 3 elements
    int min = 0;                            //for storing smallest index
    for (int i = 1; i < a.length, i++) {    //loop index 1,2
        if (a[i] <  a[min]) {               //if current array value < current smallest value
            min = i;                        //store new found smallest index
        }
    }
    return min;                             //returning min, the smallest index 
}

如果min没有通过循环更新,则意味着索引0(最小值的默认值)保持最小值。选项C将是正确的答案。