【发布时间】:2017-05-25 04:53:33
【问题描述】:
我正在使用 Java。
我需要实现一个递归函数来计算每两个值之间的差异并为我返回大小为 2 [MAXIMUM_DIFF, STARTINDEX] 的数组。
对于以下数组:
arr = {1, 4, 60, -10, 2, 7, 56, -10}
递归方法返回大小为 2 的数组:[70,2],因为最大差异为 70 (60-(-10)=70),而 60 的索引为 2。
我有 90% 来自解决方案:
public static int[] getMax(int[] arr) {
int [] retArr = new int[2];
if(arr.length == 1)
return retArr;
else {
return getMax(arr, retArr);
}
}
public static int[] getMax(int[] arr, int[] retArr) {
if(retArr[1] == arr.length - 1)
return retArr;
int currentMaxVal = arr[retArr[1]] - arr[retArr[1] + 1];
if(currentMaxVal > retArr[0]) {
retArr[0] = currentMaxVal;
}
retArr[1] = retArr[1] + 1;
return getMax(arr, retArr);
}
但是结果是[70,7] 而不是[70,2] 因为这条线retArr[1] = retArr[1] + 1;
这是因为我不知道在哪里保存索引,那么我该如何保存索引呢?
*我不确定getMax(int [] arr, int []retArr) 的第二个参数
它可能会有所不同
我无法添加其他参数,可能要更改getMax(int [] arr, int []retArr)的第二个参数,并且我不能使用静态变量
【问题讨论】:
-
为什么不传递另一个名为 index 的参数并仅在它进入比较 if 语句时才更新它
标签: java arrays algorithm recursion