このコードは、整数の配列のピーク番号を見つけることです。問題は、エラーが発生すること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で、その後はピークですが、最初の if ステートメントでは、持っていないものmyarray[9] > myarray[8]
も検索されるため、このエラーが発生します。myarray[9+1]
最初のステートメントを削除&&
して「または」(||
)を追加することはできません。これは、間違った答えが得られるためです。アイデアはありますか?