因此使用for循环或while循环找到数组的最大值非常简单,但我想尝试使用递归。出于某种原因,子串不起作用 - 它说"找不到符号"。为什么是这样?我的策略是继续细分和比较双方,直到只剩下一个应该是最大的......我做得对吗?感谢
public static int max(int[] array) {
if (array.length == 1) {
return array[0];
} else {
int mid = (array.length) / 2;
int leftmax = max(array.substring(0, mid));
int rightmax = max(array.substring(mid, array.length));
if (leftmax > rightmax) {
return leftmax;
} else {
return rightmax;
}
}
}
答案 0 :(得分:4)
您将要使用Arrays.copyOfRange
。 Substring
无法在阵列上工作。
int[] firstHalf = Arrays.copyOfRange(original, 0, original.length/2);
int[] secondHalf = Arrays.copyOfRange(original, original.length/2, original.length);
我无法评论您的算法。
答案 1 :(得分:1)
由于array
类型为int[]
而非String
,因此您无法使用substring()
。相反,请跟踪您正在搜索的索引。每次迭代复制数组都浪费空间和时间。
int max( int[] array ){ return max( array, 0, array.length - 1 ); }
int max( int[] array, int low, int high )
{
if (low == high) {
return array[low];
}
else {
int mid = (high + low) / 2;
int leftmax = max(array, low, mid );
int rightmax = max(array, mid, high );
if (leftmax > rightmax) {
return leftmax;
}
else {
return rightmax;
}
}
}