【问题标题】:Find smallest integer value in array list in Java without Arrays.sort在没有Arrays.sort的Java中查找数组列表中的最小整数值
【发布时间】:2014-01-02 08:31:28
【问题描述】:

如何在不改变数组顺序的情况下找到 int 数组中的最小值?

代码sn-p:

    int[] tenIntArray = new int [10];
    int i, userIn;

    Scanner KyBdIn = new Scanner(System.in);
    System.out.println("Please enter 10 integer numbers ");

    for(i = 0; i < tenIntArray.length; i++){
        System.out.println("Please enter integer " + i);
        userIn = KyBdIn.nextInt();
        tenIntArray[i] = userIn;
    }

我不确定如何在 tenIntArray 中找到最小的数组值并显示位置

例如数组持有 - [50, 8, 2, 3, 1, 9, 8, 7 ,54, 10]

输出应该是“The smallest value is 1 at position 5 in array

【问题讨论】:

  • 哎哟。索引计数从 0 开始,而不是 1。作为一个条件,您应该使用 i
  • 感谢您的帮助:D
  • @extraneon 这不是“只是为了安全”,而是更合乎逻辑、更普遍接受的做事方式。

标签: java arrays algorithm integer


【解决方案1】:

This 图应该会有所帮助:

那么回答你的问题,你会在纸上做什么?

  1. tenIntArray[0] 创建并初始化最小值
  2. 创建一个变量来保存数组中最小值的索引并将其初始化为0(因为我们在1中说过要在tenIntArray[0]处初始化最小值)
  3. 循环遍历数组的元素
  4. 如果你发现一个元素低于当前最小值,用这个元素更新最小值,并用这个元素的对应索引更新索引
  5. 大功告成

现在编写算法应该很简单了。

【讨论】:

    【解决方案2】:

    试试这个:

    //Let arr be your array of integers
    if (arr.length == 0)
        return;
    int small = arr[0];
    int index = 0;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] < small) {
            small = arr[i];
            index = i;
        }
    }
    

    【讨论】:

    • 感谢您的帮助!
    【解决方案3】:

    使用 Java 8 流,您可以创建一个二元运算符,它比较两个整数并返回其中最小的。

    让 arr 是你的数组

    int[] arr = new int[]{54,234,1,45,14,54};
    int small = Arrays.stream(arr).reduce((x, y) -> x < y ? x : y).getAsInt();
    

    【讨论】:

    • 我可以知道这种方法的时间复杂度吗?
    • 我猜会是 O(n)
    【解决方案4】:

    我建议的方法将同时找到minmax

    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

    【讨论】:

      【解决方案5】:
          int[] input = {12,9,33,14,5,4};
      
          int max = 0;
          int index = 0;
          int indexOne = 0; 
          int min = input[0];
          for(int i = 0;i<input.length;i++)
          {
              if(max<input[i])
              {
                  max = input[i];
                  indexOne = i;
              }
      
              if(min>input[i])
              {
                  min = input[i];
                  index = i;
              }
      
          }
          System.out.println(max);
          System.out.println(indexOne);
          System.out.println(min);
          System.out.println(index);
      

      【讨论】:

        【解决方案6】:

        这里是函数

        public int getIndexOfMin(ArrayList<Integer> arr){
            int minVal = arr.get(0); // take first as minVal
            int indexOfMin = -1; //returns -1 if all elements are equal
            for (int i = 0; i < arr.size(); i++) {
                //if current is less then minVal
                if(arr.get(i) < minVal ){
                    minVal = arr.get(i); // put it in minVal
                    indexOfMin = i; // put index of current min
                }
            }
            return indexOfMin;  
        }
        

        【讨论】:

          【解决方案7】:

          数组的第一个索引为零。一个都没有。

          for(i = 0; i < tenIntArray.length; i++)
          

          所以纠正这个。 你问的代码是:

              int small = Integer.MAX_VALUE;
              int i = 0;
              int index = 0;
              for(int j : tenIntArray){
                  if(j < small){
                      small = j;
                      i++;
                      index = i;
                  }
              }
              System.out.print("The smallest value is"+small+"at position"+ index +"in array");
          

          【讨论】:

          • 是的,我做到了。你能告诉我错误吗?
          • 它找到了最小但不是正确的索引。例如,使用输入 int [] tenIntArray = {1,-8,2,2,0,-15};,您将增加 index 变量 3 次。但这不会为您提供数组中最小值的正确索引。您必须跟踪当前索引,并在找到最小值时更新另一个变量(就像您为 small 所做的那样)。
          • 啊我明白了。谢谢。如果我以 int index = -1; 开头,对吗?
          • 感谢您的帮助:D
          • 您应该在if语句之外增加i,因为即使当前索引不是最小的,它也应该增加i以跟踪当前索引。跨度>
          猜你喜欢
          • 2021-04-17
          • 1970-01-01
          • 2015-02-03
          • 1970-01-01
          • 2021-03-14
          • 2015-09-29
          • 2019-03-17
          • 2020-11-28
          • 1970-01-01
          相关资源
          最近更新 更多