5

嗨,我想获取数组的最低 3 个元素。最低是指最小值。我不能使用 collections.Sort 方法,因为我需要知道元素的索引。因此,我使用以下代码来获得最低的,但我需要知道如何获得最低的 3。

int minimum = grades[1];
int index = 1;

for(i=1; i<= numberOfStudents; i++){
    if (grades[i]<minimum){
        minimum = grades[i];
        index = i;
    }
}
4

5 回答 5

4

这是一个非常简单的方法:

public static void main(String[] args) {
    int[] myArray = { 5, 8, 12, 9, 50, 11, 4 };

    System.out.println(Arrays.toString(myArray));
    System.out.println(Arrays.toString(getThreeLowest(myArray)));
}

private static int[] getThreeLowest(int[] array) {
    int[] lowestValues = new int[3];
    Arrays.fill(lowestValues, Integer.MAX_VALUE);

    for(int n : array) {
        if(n < lowestValues[2]) {
            lowestValues[2] = n;
            Arrays.sort(lowestValues);
        }
    }
    return lowestValues;
}

这输出:

[5、8、12、9、50、11、4]
[4、5、8]


Arrays.sort只对本地数组进行调用,而不是对主数组进行调用。这样做的原因只是为了简化与n.

于 2012-12-02T22:29:16.437 回答
3

建立你所拥有的

    int[] grades = { 100, 99, 98, 97, 10, 95, 11, 9, 94 };
    int numberOfStudents = grades.length;

    int minimum = grades[1];
    int minimum2 = grades[1];
    int minimum3 = grades[1];
    int index = 1;
    int index2 = 1;
    int index3 = 1;

    for(int i=1; i< numberOfStudents; i++){
        if (grades[i]<minimum3 && grades[i]>=minimum2){
            minimum3 = grades[i];
            index3 = i;
        }
        if (grades[i]<minimum2 && grades[i]>=minimum){
            //We have a new 2nd lowest - shift previous 2nd lowest up
            minimum3 = minimum2;
            index3 = index2;
            minimum2 = grades[i];
            index2 = i;
        }
        if (grades[i]<minimum){
            //We have a new lowest - shift previous lowest up
            minimum3 = minimum2;
            index3 = index2;
            minimum2 = minimum;
            index2 = index;
            minimum = grades[i];
            index = i;
        }
    }
    System.out.println("Smallest is at " + index + " with value of " + minimum);
    System.out.println("Next Smallest is at " + index2 + " with value of " + minimum2);
    System.out.println("Next Smallest is at " + index3 + " with value of " + minimum3);
于 2012-12-02T22:51:54.873 回答
1

这可能有点“太多”,但在我的脑海中,您可能会创建一个对象数组,每个对象都包含它在原始“等级”数组中的值和索引并对其进行排序?

我能想到的唯一另一种方法是通过数组并手动跟踪 3 个最低元素及其索引,就像你已经在做的那样......

于 2012-12-02T22:28:07.497 回答
0

我们能做到吗

    int[] myArray = { 5, 8, 12, 9, 50, 11, 4 };
    Arrays.sort(myArray);
    System.out.println(myArray[0] +","+ myArray[1] +","+ myArray[2]);
于 2013-05-22T13:15:42.357 回答
0

取三个变量:最小的、第二小的和第三小的。以同样的方式找到最小的元素,在每个步骤中找到三个最小的元素。

您需要检查是否有任何元素小于最小数字,或者它在最小和第二小之间,或者它在第二小和第三小之间。

由于这可能是一项作业、任务或家庭作业,我不会在这里编写代码。

于 2012-12-02T22:28:01.647 回答