使用分而治之检查排序数组是否有 A[i] = i

Check if Sorted Array has A[i] = i using Divide and Conquer

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

Return true if A[i] = i

else return false;

我只需要 return 真或假,而不是位置。

我已经实现了代码,但是有一些小错误。

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 即使它找到了中间。

我应该做哪些更改才能使它return在所有情况下都是正确的。

在递归调用 find 的地方,在调用 find 之前应该有一个 return,这样它将 return 嵌套调用的结果

return find(...) //etc..

你的代码有问题!!

检查测试用例 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] !!!! 希望对你有帮助