我正在尝试使用分而治之方法(递归)在数组中找到最大数量。但是,当我编译这段代码时,我得到了ArrayIndexOutOfBounds异常。
我不确定我要去哪里。这是我的代码段:
public class ... {
int[] A = {2,4,5,1,6,7,9,3};
int max;
public void solution() {
max = findMax(0, A.length-1);
//print max
}
private int findMax(int a, int b){
if(b-a == 1){
return A[a]>A[b] ? A[a] : A[b];
}
else if(a==b){
return A[a];
}
return findMax(findMax(a, (a+b)/2), findMax((a+b)/2 +1, b));
}
}
最佳答案
问题出在最后一行:
return findMax(findMax(a, (a+b)/2), findMax((a+b)/2 +1, b));
这将把
findMax()
方法的结果用作另一个findMax()
调用的参数,这意味着它们将用作数组的索引。那将给您错误的结果或导致ArrayIndexOutOfBoundsException
。您要做的是返回两个
findMax()
调用的最大值:return Math.max(findMax(a, (a+b)/2), findMax((a+b)/2 + 1, b));