我试图递归地解决这个算法;我想检查数组中的所有值是否相同(或彼此相等)。如果所有值都相等,则返回true,如果不相等,则返回false。我的代码没有通过任何测试。
public boolean allEqual(int[] a, int start, int end){
if (start > end) return false;
if (a.length==0) return false;
if (start==end && a[start] == a[end]) return true;
if (a[start] != a[end]){
return false;
}
return allEqual(a, start++, end);
}
答案 0 :(得分:8)
变化
return allEqual(a, start++, end);
到
return allEqual(a, start+1, end);
start++
将start
的原始值传递给递归调用(这是后递增运算符返回的值),因此递归将永远不会结束,并且您可能得到StackOverflowError
。< / p>
答案 1 :(得分:2)
最简单的方法是简单地获取数组的第一个值,直到单个值不相同为止。
public void allEqual(int[] arr) {
if(arr.length==0) return false;
for(int i=0; i<arr.length; i++)
if(arr[0]!=arr[i]) return false;
return true;
}
编辑:意识到这个答案是用递归做的,而我的回答不是那样做的。
答案 2 :(得分:1)
您可以使用经典的分治法来解决它。将数组分成两半,直到有两个元素,然后检查它们是否相等。然后征服他们并比较价值观。像这样:
class Ideone {
static boolean checkEquals(int a[], int start, int length) {
if (length==2)
return a[start]==a[start+1] && a[start]==a[0];
else
return checkEquals(a,start+0,length/2) &&
checkEquals(a,start+length/2,length/2);
}
public static void main (String[] args) {
int a[]={1,1,1,1,1,1,1,1};
System.out.println(checkEquals(a,0,8));
}
}
已执行here。