【问题标题】:Lowest values of an array if more than one result如果有多个结果,则数组的最低值
【发布时间】:2013-09-21 10:47:49
【问题描述】:

我需要找到数组中的最小值,但我想知道如何处理多个结果。假设我的数组包含[1,4,7,5,3,1] - 我的结果应该是1,1。有什么想法吗?

double minimum = array1[0]; //sets the first to be the smallest
for (int i = 0; i < array1.length; i++) //goes through your array
{
 if (array1[i] < array1[0]) //checks and replaces if necessary
 {
    minimum = array[i];   

 }
}

System.out.println( minimum ); //returns the value of the smallest

【问题讨论】:

  • 你如何保存一个计数器来记录你见过的最小值的出现次数?另外,请注意,直接比较 double 值的相等性并不是一个好主意。您可能需要某种容忍度。你真的需要使用double而不是int吗?
  • 对数组进行排序;从头开始迭代,直到当前元素的值与之前的值相同。
  • 说我需要获取最小值的索引吗?而不是仅仅计算我想将它们的索引存储在数组中的最低值的数量?

标签: java arrays search arraylist integer


【解决方案1】:

您的代码中有一个小错误,您应该将当前值与最小值进行比较,而不是与第一个值进行比较

double minimum = array1[0]; //sets the first to be the smallest
var minValueCounter = 0;
for (int i = 0; i < array1.length; i++) //goes through your array
{
 if (array1[i] < minimum) //checks and replaces if necessary
 {
    minimum = array[i];  
    minValueCounter  = 1; 

 }
 else if (array1[i] == minimum) //checks and replaces if necessary
 {
    minValueCounter++;

 }
}

【讨论】:

    【解决方案2】:

    一件事可以是“排序”您的数组以升序排列,然后从开始显示值直到它们相等

    【讨论】:

      【解决方案3】:
      Arrays.sort(array1);
      ArrayList<Integer> smallestValues = new ArrayList<Integer>();
      smallestValues.add(array1[0]);
      int i=1;
      while (i<array1.length && (array1[i] == array1[i-1])) {
           smallestValues.add(array1[i]);
          i++;
       }
      

      【讨论】:

        【解决方案4】:

        保留另一个变量来计算重复项。如果您找到等于当前最小值的值,请增加此计数。请记住每次最小更改时重置计数。

        【讨论】:

          【解决方案5】:

          我会这样做

              int[] a = { 1, 4, 7, 5, 3, 1 };
              Arrays.sort(a);
              int n = 1;
              for (int i = 1; i < a.length && a[i] == a[0]; i++)
                  n++;
              int[] res = Arrays.copyOf(a, n);
          

          【讨论】:

            【解决方案6】:

            如何使用Collections.sort()

            我假设你的 array1[]double 类型

            double array1[] = new double[] { 1, 4, 7, 5, 3, 1 };
            ArrayList<Double> al = new ArrayList<Double>();
            for (int i = 0; i < array1.length; i++)
                al.add(array1[i]);
            Collections.sort(al);
            System.out.println(al.toString());
            

            输出:

            [1.0, 1.0, 3.0, 4.0, 5.0, 7.0]
            

            要打印所有相等的最小值,请使用

            for (int i = 0; i < (al.size() - 1); i++) { // why (al.size() - 1), Its better if try to learn yourself
                if (Double.compare(al.get(i), al.get(i+1))==0)
                   System.out.print(""+al.get(i) + "," + al.get(i + 1));
                else
                   break;
            }
            

            输出:

            1.0,1.0
            

            【讨论】:

              【解决方案7】:

              只是为了好玩,没有for循环的解决方案:

                  Integer[] inputA = new Integer[]{1,4,7,5,3,1};
                  List<Integer> inputL = Arrays.asList(inputA);        
              
                  Collections.sort(inputL);
              
                  int last = Collections.frequency(inputL, Collections.min(inputL));
              
                  inputA = Arrays.copyOfRange(inputL.toArray(new Integer[inputL.size()]), 0, last);
              
                  System.out.println(Arrays.deepToString(inputA));
              

              输出:

                 [1, 1]
              

              相关方法apidoc(全静态):

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-03-18
                • 1970-01-01
                • 2020-09-11
                • 1970-01-01
                • 2022-11-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多