【问题标题】:Finding the Minimum And Maximum in ArrayList w/o Sorting - Java在没有排序的 ArrayList 中查找最小值和最大值 - Java
【发布时间】:2015-07-21 17:31:09
【问题描述】:

我试图在没有排序的 ArrayList 中找到最小值和最大值:

这是我当前的尝试 - 但是我似乎无法让它正常工作:

import java.util.*;

class Untitled {
    static ArrayList<Integer> al = new ArrayList<Integer>();

    public static void main(String[] args) {

        System.out.println(populateArray(al));
        System.out.println(findMin(al,0));

    }   

    public static ArrayList<Integer> populateArray(ArrayList<Integer> a) {

        al.add(1);
        al.add(2);
        al.add(30);
        al.add(3);
        al.add(13);
        al.add(34);
        al.add(4);
        al.add(3);
        al.add(2);
        al.add(1);
        al.add(93);
        return a;
    }

    public static int findMin(ArrayList<Integer> a, int start) {
        int min = start;

        for(int i=start; i<a.size(); i++) {
            if(a.get(i) < a.get(min)) {
                min = i;
            }
        }
        return start;
    }
}

【问题讨论】:

  • 你在最后返回start
  • 您能与潜在的回答者分享您发现了什么问题吗?
  • 表示您不想使用Collections.minCollections.max。但为什么呢?
  • 返回 min 而不是 start ,你不要更新 start
  • @TheLostMind 我总是把这两个搞混:)

标签: java arraylist main minimum


【解决方案1】:

使用 Java 8,您可以非常轻松地只遍历列表一次:

IntSummaryStatistics stats = al.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("Minimum is: "+stats.getMin());
System.out.println("Maximum is: "+stats.getMax());

【讨论】:

    【解决方案2】:

    也许你正在寻找这样的东西:

        public static void main(String[] args) {
            findMinMax(new int[] {10,40,50,20,69,37});
        }
        public static void findMinMax(int[] array) {
            if (array == null || array.length < 1)
                return;
            int min = array[0];
            int max = array[0];
    
            for (int i = 1; i <= array.length - 1; i++) {
                if (max < array[i]) {
                    max = array[i];
                }
    
                if (min > array[i]) {
                    min = array[i];
                }
            }
            System.out.println("min: " + min + "\nmax: " + max);
        }
    

    显然,这不是最优化的解决方案之一,但它会为您工作。它使用简单的比较来跟踪minmax 值。输出是:

    min: 10 max: 69

    【讨论】:

      【解决方案3】:

      您需要执行以下操作::

         public static int findMin(ArrayList<Integer> a) {
                  int min = 0;
      
                  for(int i=0; i<a.size(); i++) {
                     if(i==0) min= a.get(i);
                      if(a.get(i) < min) {
                          min = a.get(i);
                      }
                  }
                  return min;
              } 
      
      public static int findMax(ArrayList<Integer> a) {
              int max = 0;
      
              for(int i=0; i<a.size(); i++) {
                 if(i==0) max= a.get(i);               
                 if(a.get(i) > max) {
                      max = a.get(i);
                  }
              }
              return max;
          }
      

      【讨论】:

        猜你喜欢
        • 2017-04-20
        • 2016-01-05
        • 2022-08-23
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 2012-09-16
        • 2017-03-19
        相关资源
        最近更新 更多