如何找到存储在数组中的最高和最低数字?

时间:2016-09-24 19:28:07

标签: java arrays

我正在尝试打印存储在数组中的最高和最低整数。我能够打印最高但是最低的我没有得到正确的结果。

考虑下面的两个课程:

class ArrayUtilityNew
{
    public static int findMaxMin(int a[])
    {
        int n=a.length;
        int n2=n-1;
        int minNo=0;
        int count=0;
        int maxNo=0;

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(a[i]<a[j])count++;

            }
            //This gives the highest no. if the count is 0
            if(count==0)
            {
              maxNo=a[i];

            }

          //Lowest no. shall be gained here if the count is greater
          // than the no of elements in the array

           // if(count>n)
           // {
            //    minNo=a[i];
           // }

            count=0;
        }
        return maxNo;            
    }

}

class ArrayInteractionsNew
{
    public static void main(String arr[])
    {
        int one[]={3,20,1999,2,10,8,999};
        int answer=ArrayUtilityNew.findMaxMin(one);
        System.out.println("The highest no in the array is "+answer);   
    }        
}

如果第二个背后的逻辑不正确还是存在其他错误?

如何纠正?

6 个答案:

答案 0 :(得分:4)

您可以返回int[] minmax。从一个包含两个元素的数组开始,遍历数组 1 ,如

public static int[] findMinMax(int[] a) {
    int[] result = { Integer.MAX_VALUE, Integer.MIN_VALUE };
    for (int i : a) {
        result[0] = Math.min(result[0], i);
        result[1] = Math.max(result[1], i);
    }
    return result;
}

结果将是一个数组,第一个元素是最小值 2 。然后测试一下,

public static void main(String[] args) {
    int[] arr = { 3, 20, 1999, 2, 10, 8, 999 };
    int[] minMax = findMinMax(arr);
    System.out.printf("%s: min=%d, max=%d%n", 
            Arrays.toString(arr), minMax[0], minMax[1]);
}

我得到(正如我所料)

[3, 20, 1999, 2, 10, 8, 999]: min=2, max=1999

1 此处,for-each loop
2 第二个元素是最大值。

答案 1 :(得分:3)

我认为你的解决方案过于复杂......一个更好,更有效的解决方案就是:

int n=a.length;
int minNo=a[0];
int maxNo=a[0];

for(int i=1;i<n;i++)
{
     if(a[i] > maxNo) {
         maxNo = a[i];
     } else if(a[i] < minNo) {
         minNo = a[i];
     }
}

// do whatever you want with maxNo and minNo

同样更有效(以代码大小方式)的方式是使用列表或流,因为你可以用它做单行。

编辑:较少模糊的代码和有关效率的解释

答案 2 :(得分:1)

你的答案是n ^ 2。要查找最小值和最大值,只需要订购n。

换句话说,你只需要看起来是线性的。

执行一次查看列表的循环。随时跟踪最小值和最大值。最初设置min = maxvalue和max = minvalue。当您发现小于min的值时,它将成为新的最小值。

以下是伪代码中的示例。

min = max_int
max = min_int
for (i=0; i < array.length; i++) 
    if array[i] < min 
        min = array[i]
    if array[i] > max
        max = array[i]

答案 3 :(得分:0)

如果它的方法有效,你的方法就会不必要地复杂化。

  • 创建两个变量:minNomaxNo
  • 设置minNo = Integer.MAX_VALUEmaxNo = Integer.MIN_VALUE
  • 循环遍历数组。如果元素为>= maxNo,请将其值指定给maxNo。另外(不是 - 而不是else if!),如果元素是<= minNo,则将其值分配给minNo
  • 循环结束后,minNomaxNo将被正确分配。

答案 4 :(得分:0)

由于java8中的Streaming API,这是一个双线程:

int[] array = new int[] {5,7,2,9,10,24,3,23};

int min = IntStream.of(array).min().getAsInt();
int max = IntStream.of(array).max().getAsInt();

或者作为一种更有效的3-liner:

Arrays.parallelSort(array);
int min = array[0];
int max = array[array.length -1];

答案 5 :(得分:0)

public static void minMax(int []arr){
     int min = arr[0];
     int max = arr[0];
     for(int i=1; i<arr.length; i++){
         min = Math.min(min,arr[i]);
         max = Math.max(max,arr[i]);
     }
//do whatever you want with the max and min
}