计算数组中两个相邻数字之间的最大差异

时间:2015-11-21 23:57:27

标签: java arrays difference

最近我被分配了一个任务,要求我“计算传递给它的数组中两个相邻数字之间的最大差异”。我是Java的新手(过去我只做过VB),由于这个话题没有得到很好的解释,我不太清楚如何去做。

以下是有关任务本身的一些其他信息:

该功能必须通过以下测试。函数maxDiff应该计算传递给它的数组中两个相邻数字之间的最大差异。

@Test
public void assessmentTest() {
 int [] numbers = {12, 8, 34, 10, 59};
 assertEquals(49, maxDiff(numbers));
 int [] numbers2 = {-50, 100, 20, -40};
 assertEquals(150, maxDiff(numbers2));
}

5 个答案:

答案 0 :(得分:2)

你必须保证采取绝对差异,不要忘记它。这就是我使用Math.abs()函数的原因。

public static int maxDiff(int[] numbers) {
      int diff = Math.abs(numbers[1] - numbers[0]);
      for(int i = 1; i < numbers.length-1; i++)
          if(Math.abs(numbers[i+1]-numbers[i]) > diff)
              diff = Math.abs(numbers[i+1] - numbers[i]);
      return diff;
}

答案 1 :(得分:2)

这样的事情可以解决问题:

public static int maxDiff(int[] numbers) {
      if (numbers.length < 2) {
          return 0;
      }
      if (numbers.length == 2) {
          return Math.abs(numbers[1] - numbers[0]);
      }
      int max = Math.abs(numbers[1] - numbers[0]);
      for (int i = 2; i < numbers.length; i++) {
          int diff = Math.abs(numbers[i-1] - numbers[i]);
          if (diff > max) {
              max = diff;
          }
      }
      return max;
}

答案 2 :(得分:2)

针对您提出的具体问题:

public static int maxDiff(int[] arr) {
    if(arr.length < 2)
        return -1; // error condition: throw exception?

    int maxdiff = Integer.MIN_VALUE;
    for(int i = 1; i < arr.length; ++i) {
        int diff = Math.abs(arr[i] - arr[i-1]);
        if(diff > maxdiff)
            maxdiff = diff;
    }

    return maxdiff;
}

如果你想要数组中所有数字(不仅仅是相邻数字)的最大差异,最有效的方法是迭代数组一次以找到最小值和最大值,然后返回绝对值的绝对值两个值相互减去。

public static int maxDiff(int[] arr) {
    if(arr.length < 2) 
        return -1; // error condition: throw exception?

    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;
    for(int i = 0; i < arr.length; ++i) {
        if(arr[i] < min)
            min = arr[i];
        if(arr[i] > max)
            max = arr[i]; 
    }

    return Math.abs(max - min);
}

答案 3 :(得分:2)

这段代码可以帮助您:

    int[] numbers = {12, 8, 34, 10, 59};

    int diff = 0;
    int previous = 0;

    for (int n : numbers) {
        diff = Math.max(diff, Math.abs(n - previous));
        previous = n;
    }

变量&#34;差异&#34;将包含您要查找的值。

答案 4 :(得分:0)

您可以将其用于 Java;

int arrayMaximalAdjacentDifference(int[] inputArray) {
    int max=0;
    for( int i = 1 ; i < inputArray.length ; i++ ){
        max = Math.max(max,Math.abs(inputArray[i] - inputArray[i-1]));
    }
    return max;
}