Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 给定排序数组,如果数组A包含元素A[i],且A[i]=i(递归和分治),则返回索引i_Java_Arrays_Recursion_Binary_Divide And Conquer - Fatal编程技术网

Java 给定排序数组,如果数组A包含元素A[i],且A[i]=i(递归和分治),则返回索引i

Java 给定排序数组,如果数组A包含元素A[i],且A[i]=i(递归和分治),则返回索引i,java,arrays,recursion,binary,divide-and-conquer,Java,Arrays,Recursion,Binary,Divide And Conquer,所以我有作业要做一个递归方法,使用分治算法来搜索一个排序的数组,并检查a[i]==i(如果值匹配数组的当前索引)。现在我不明白为什么我们会使用分而治之的算法,因为我们没有寻找一个特定的值 在我的头脑中(我是一个初学者),我只想做一个线性递归方法。给定长度为n的数组A,我们可以 if(n<0){ return -1;} if(A[n] == n){ return n;} else{ return recursiveMethod(Array A, n-1); } if(谢谢你承认

所以我有作业要做一个递归方法,使用分治算法来搜索一个排序的数组,并检查a[i]==i(如果值匹配数组的当前索引)。现在我不明白为什么我们会使用分而治之的算法,因为我们没有寻找一个特定的值

在我的头脑中(我是一个初学者),我只想做一个线性递归方法。给定长度为n的数组A,我们可以

    if(n<0){
return -1;}

if(A[n] == n){
return n;}

else{
return recursiveMethod(Array A, n-1);
}

if(谢谢你承认这是一个家庭作业问题:)。人们不太可能完全为你回答这个问题,但他们往往非常有趣,以至于人们无法避免发表评论。如果你注意格式和清晰正确的语言等细节,你总能得到更好的答案。例如,如果包含函数定义(
function recursiveMethod(数组a,整数开始){
),并缩进函数体,代码将更容易理解

现在让我们来讨论这个问题:对于一个大小为
n
的数组,你的函数需要进行精确的
n
比较(我想你已经知道这部分了,它是线性函数中的线性,也是O(n))

我们能做得更好吗

要解决这样的问题,试着做一个懒惰的算法,总是寻找不需要做的工作。在这里,我们可以利用这样一个事实:数组被排序为可以跳过的工作的原因:当
a[i]>i
时,所有值
j=i..a[i]
也必须满足
a[j]>j
。这是假设A可能包含重复的值。如果A中的所有值都必须是不同的,则可以排除比我上面所做的多一点的值