我对这个问题有一些严重的问题。我需要一个“分而治之”的递归算法,告诉我最长的非递减数组数组的长度。就个人而言,我会选择使用我在仔细阅读问题之前编写的代码。递归,分而治之算法,用于最长的非减少数字数组
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