我對這個問題有一些嚴重的問題。我需要一個「分而治之」的遞歸算法,告訴我最長的非遞減數組數組的長度。就個人而言,我會選擇使用我在仔細閱讀問題之前編寫的代碼。遞歸,分而治之算法,用於最長的非減少數字數組
int bestIndex = 0;
int bestLength = 0;
int curIndex = 0;
int curLength = 1;
for (int i = 1; i < a.length; i ++){
if (a[i] >= a[i-1]){
curLength ++;
}else {
curLength = 1;
curIndex = i;
}
if (curLength > bestLength){
bestIndex = curIndex;
bestLength = curLength;
}
}
return bestLength;
的問題是分配要求我使用分而治之,我想不出這樣做的方法。
一個例子是 「4 2 3 3 1 2 4 5 9 2」 這將返回 「5」,因爲 「1 2 4 5 9」
任何幫助不勝感激。
謝謝
遍歷列表,並選擇「分割點」,以發生減少的地方。然而,除非你在中間選擇一個分割點,否則這不會真正「分裂」。我會從中間開始,然後向外迭代。以i = m(中)然後m-1,m + 1,m-2,m + 2等循環,直到i和i + 1之間的減小。然後將陣列切成兩半,然後在每一半上進行遞歸。如果不存在減少,則返回序列的長度。 – VoidStar