从某个索引开始的最小数字的索引

时间:2015-09-07 08:33:21

标签: java arrays

我正在尝试找到最小数字的索引但仅在数组中的某个点之后。

我正在处理的方法是indexOfTheSmallestStartingFrom。

我正在进行mooc.fi练习104.3,如果您需要更多信息,请转到http://mooc.cs.helsinki.fi/programming-part1/material-2013/week-6?noredirect=1并向下滚动到练习104.

我的问题是,我如何从数组中的索引2开始,并忽略它之前的所有内容。我试图在特定索引之后找到数组中的最小数字。

我的代码

import java.util.Arrays;

public class Main {

    public static int smallest(int[] array) {
        int[] sorted = new int[array.length];

        for (int i = 0; i < array.length; i++) {
            sorted[i] = array[i];
        }

        Arrays.sort(sorted);
        return sorted[0];
    }

    public static int indexOfTheSmallest(int[] array) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == smallest(array)) {
                return i;
            }
        }
        return 0;
    }

    // This is the method here.
    public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
        for (int i = index; i < array.length; i++) {
            if (array[i] == smallest(array)) {
                return indexOfTheSmallest(array);
            }
        }
        return 27;
    }

    public static void main(String[] args) {
        // indexes:    0  1  2  3   4
        int[] values = {-1, 6, 9, 8, 12};
        System.out.println(indexOfTheSmallestStartingFrom(values, 1));
        System.out.println(indexOfTheSmallestStartingFrom(values, 2));
        System.out.println(indexOfTheSmallestStartingFrom(values, 4));
    }
}

3 个答案:

答案 0 :(得分:1)

在实现smallest时,您无法使用indexOfTheSmallestStartingFrom方法,因为smallest返回的最小元素可能位于数组的开头(即索引小于通过index)。

更简单的实现方式是:

public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
    int minIndex = index;
    for (int i = index; i < array.length; i++) {
        if (array[i] < array[minIndex]) {
            minIndex = i;
        }
    }
    return minIndex;
}

答案 1 :(得分:0)

indexOfTheSmallest返回最小元素的索引,同时将其与indexOfTheSmallestStartingFrom中的元素值进行比较。

<强> == EDIT ==

请参阅@Eran的答案以获得更好的实施。

答案 2 :(得分:0)

我尝试尽可能少地修改您的代码。

public class Main {

    public static int smallestFrom(int[] array, int index) {
        int[] sorted = new int[array.length-index];

        for (int i = index; i < array.length; i++) {
            sorted[i-index] = array[i];
        }

        Arrays.sort(sorted);
        return sorted[0];
    }

    // This is the method here.
    public static int indexOfTheSmallestStartingFrom(int[] array, int index) {
        int smallest = smallestFrom( array, index);
        for (int i = index; i < array.length; i++) {
            if (array[i] == smallest ) {
                return i;
            }
        }
        return 27;
    }

    public static void main(String[] args) {
        // indexes:    0  1  2  3   4
        int[] values = {-1, 6, 9, 8, 12};
        System.out.println(indexOfTheSmallestStartingFrom(values, 1));
        System.out.println(indexOfTheSmallestStartingFrom(values, 2));
        System.out.println(indexOfTheSmallestStartingFrom(values, 4));
    }
}

smallest方法已更改为smallestFromsmallestFrom计算从索引开始的最小值。这是通过制作一个只包含从索引到数组末尾的值的复制数组来实现的 indexOfTheSmallestStartingFrom首先调用smallestFrom来获取该subArray中的smalles值;然后它从索引迭代数组,直到找到所述最小值。找到值时的索引是返回的索引。

Eran的解决方案更好。更少的代码和更高效。此代码的存在只是为了帮助您获得更好的未来。