数组的最大差异

时间:2016-09-26 05:35:36

标签: java arrays

对于此数组{2,6,1,5,10,7},下面的代码将返回10-1 = 9.请解释它是如何工作的以及该逻辑如何在该数组中找到最小值1。

void method(int[] ar,int n) {
    int max =ar[1]-ar[0];
    int i,j;
    for( i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++){
            if(ar[j]-ar[i]>max)
                max=ar[j]-ar[i];
        }
    }
    System.out.println(max);
}

6 个答案:

答案 0 :(得分:3)

您只需要在一个循环中找到最大数量和最小数量:

int max = Integer.MIN_VALUE , min = Integer.MAX_VALUE;

for(int i = 0 ; i < n ; i ++){
    max = Math.max(arr[i], max);
    min = Math.min(arr[i], min);
}

System.out.println(max - min);

答案 1 :(得分:1)

试试这个。

import java.util.Arrays;

    public class Test {
        public static void main(String[] args) {

            int[] a = { 2, 6, 1, 5, 10, 7 };
            Arrays.sort(a);
            System.out.println(a[a.length - 1] - a[0]);
        }
    }

答案 2 :(得分:1)

为什么得到'9'作为答案的原因是因为被计算的最大差异是10-1=9

i=2j=4

时考虑循环

计算的最大差异是
=&GT; max = ar[j] - ar[i];
=&GT; max = 10 - 1;
=&GT; max = 9

修改

但是,当然,更优化的方法是对数组进行排序,找出第一个和最后一个元素之间的差异。

Arrays.sort(ar);
System.out.println(ar[ar.length-1] - ar[0]);

<强>输出

9

答案 3 :(得分:1)

程序中的代码复杂性非常高。

总是有更好的方法

我的

    int[] numArray = {2,6,1,5,10,7};
    int max = numArray[0];
    int min = numArray[0];
    for( int i : numArray){ 
      if( max < i )
        max = i;
      if( min > i )
        min = i;
    }
System.out.println("Maximum Difference of an Array is "+(max - min ));

答案 4 :(得分:1)

逻辑假设数组中的最大差异在前两个数字之间。

最大变量用于保存最大差异

max = arr[1] - arr[0] //assumption made that the the first two integers give the max difference

现在我们创建一个嵌套循环,以便使用数组中的所有其他值计算数字的差异。

但我们不需要检查已计算的值以节省我们的时间。由于我们只需要差异,我想指出一点,我们采取差异总是积极的。因此,我们只关注未来的价值

abs(arr[0] - arr[1]) = abs(arr[1] - arr[0])

其中abs代表绝对值。

现在,当算法发现任何大于最大值的差异时,将一个值与其他值的差异进行比较时,它会更新max的值。

因此,在退出循环后,我们得到数组值的最大差异。

PS:更好的方法是对数组进行排序,然后减去索引和最后一个值

PPS:如果您想更好地理解这个循环,您还可以查看选择排序

答案 5 :(得分:0)

此解决方案用于未排序的负数数组

public int computeDifference() {
    int min_ele = arr[0];
    int max_ele = arr[0];
    
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] < min_ele)
            min_ele = arr[i];
        if (arr[i]>max_ele)
            max_ele = arr[i];
    }
    return Math.abs(max_ele - min_ele);
}