使用Divide and Conquer检查Sorted Array是否有A [i] = i

时间:2015-10-10 00:01:36

标签: java algorithm divide-and-conquer

我获得了一个具有不同元素的排序数组。

返回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。

2 个答案:

答案 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],它污染了答案!!!! 希望对您有帮助

相关问题