最近我被分配了一个任务,要求我“计算传递给它的数组中两个相邻数字之间的最大差异”。我是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));
}
答案 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;
}