這段代碼是找到一個整數數組的峯值數 問題是我得到一個錯誤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