如何在int数组中获得最低3个元素

时间:2012-12-02 22:22:06

标签: java arrays math minimum

嗨我想获得数组中最低的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;
    }
}

5 个答案:

答案 0 :(得分: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的比较。

答案 1 :(得分: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);

答案 2 :(得分:1)

这可能有点'太多',但是我可能会创建一个对象数组,每个对象包含它在原始'grade'数组中的值和索引并对其进行排序? / p>

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

答案 3 :(得分:0)

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

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

由于这可能是作业,任务或作业,我不会在这里写代码。

答案 4 :(得分:0)

我们可以吗

    int[] myArray = { 5, 8, 12, 9, 50, 11, 4 };
    Arrays.sort(myArray);
    System.out.println(myArray[0] +","+ myArray[1] +","+ myArray[2]);