【问题标题】:How to get lowest 3 elements in an int array如何获取 int 数组中的最低 3 个元素
【发布时间】:2012-11-20 09:45:05
【问题描述】:

您好,我想获取数组的最低 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;
    }
}

【问题讨论】:

  • 为什么你的数组索引从 1 开始?
  • 可能有更好的方法,但我会按您想要的值对其进行排序,然后抓取排序数组的前 3 个。
  • @Jacob 他特别说他不能使用那个。
  • 只需复制数组并排序副本即可。或者在循环时跟踪 3 个元素而不是 1 个。基础编程:p
  • @Clark - 因为第一个元素与我需要实现的目标无关

标签: java arrays math minimum


【解决方案1】:

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

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

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

【讨论】:

  • 哈哈,谢谢,这不是作业。我只是帮助一个朋友
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    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 的比较。

    【讨论】:

    • 我需要知道最低 3 的索引
    • 您可以完全按照他的类型进行操作,但不是将值存储在最低值数组中,而是存储索引(您必须使用循环而不是 foreach),然后添加一个比较器比较存储在最低值中的索引中的值的排序调用。
    【解决方案4】:

    建立在你所拥有的基础上

        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);
    

    【讨论】:

      【解决方案5】:

      我们可以吗

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

      【讨论】:

      • 你在问吗?还是回答?
      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多