这段代码是找到一个整数数组的峰值数 问题是我得到一个错误Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
。我怎样才能解决这个递归
public long DivideAndConquer(int lo,int hi)
{
int mid=((lo+hi)-1)/2;
if(myarray[mid]>=myarray[mid-1]&&myarray[mid]>= myarray[mid+1])
return myarray[mid];
else if (myarray[mid-1]>= myarray[mid])
return DivideAndConquer(lo,mid-1);
else if (myarray[mid]<=myarray[mid+1])
return DivideAndConquer(mid+1,hi);
return 99;
}
峰值数是比他们的邻居更大,如果我在数组的末尾或者在随后开始的时候我只有去寻找预览元素。
我想我得到这个错误,因为如果我的元素在最后的位置比预览大,那么是一个高峰。例如我的最后一个位置是9,那么我有myarray[9] > myarray[8]
然后是一个高峰,但在第一个if语句看起来也是myarray[9+1]
,我没有,所以它给了我这个错误。
我无法删除第一条语句的&&
并添加“或”(||
),因为那时我得到了错误的答案。请有任何想法吗?
你确定你了解比较是怎么回事吗? – Stefan 2013-05-03 10:51:20
你没有传递你想要搜索的元素。你想做什么? – Maroun 2013-05-03 10:54:02
我认为这会更容易,如果你指定你正在使用什么输入,当你得到的错误,例如:'int [] myarray = new int [] {1,2,3,4,5};'此外,它如果你确切地解释'hi'和'lo'应该是什么,那将是很好的。我认为'lo'最初是数组中第一项的索引,'hi'将是数组中最后一项的索引。但是,对于“中”的计算没有意义。例如。如果有5个项目:((lo + hi)-1)/ 2 =((0 + 4)-1)/ 2 = 3/2 = 1'但是中间项目的索引是2 – Alderath 2013-05-03 11:36:35