我获得了一个具有不同元素的排序数组。
返回true if A[i] = i
else return false;
我要求只返回真或假,而不是位置。
我已经实现了代码,但是存在一些小错误。
private static boolean find(int[] a, int low, int high)
{
System.out.println(Arrays.toString(a)+" "+low+ " "+high);
if(low<=high)
{
int mid = (low+high)/2;
if(mid==a[mid])
{
return true;
}
else if(a[mid]>mid)
{
find (a,low,mid-1);
}
else{
find (a,mid+1,high);
}
}
return false;
}
我知道即使找到了中间人,它也会到达return false
。
我应该做出哪些更改,以便在所有情况下都返回true。
答案 0 :(得分:5)
在递归调用find的地方,你应该在调用find之前有一个返回值,这样它就会返回嵌套调用的结果
return find(...) //etc..
答案 1 :(得分:-1)
您的代码中有错误!!
检查测试用例0:[1,1,2,3,4,5,6,7],测试用例1 = [1,2,3,4,5,6,6] 您的代码适用于testcase1,而不适用于testcase0
由于testcase1,mid为3和4> 3,然后跳过[5,6,6],它污染了答案!!!! 希望对您有帮助