我在解决方案中有一个问题,我提到了以下问题
数组A [l .. .n-l]中的魔术索引被定义为索引 A [i] = i。给定一个不同整数的排序数组,写一个 在数组A中查找魔术索引(如果存在)的方法。
我提到的解决方案看起来像。假设'代表开始,并且' e'代表结束。
int fun(int a[], int s, int e)
{
if(s > e || s < 0 || e >= array.length)
return -1;
mid = (s + e)/2;
if(mid == a[mid])
return mid;
else if(mid < a[mid])
return fun(a, s, mid-1);
else
return fun(a, mid+1, e);
}
我不确定这里的结局情况。
我觉得结局条件应该是
if(s > e)
return -1;
让我们考虑魔法指数不存在时的两种极端情况
CASE 1 - going left till index 0
Say the array looks as follows a[] = {2,10,20,30,40,50}
mid = (0+6)/2 = 3 , call fun(0,2)
mid = (0+2)/2 = 1 , call fun(0,0)
mid = (0+0)/2 = 0 , call fun(0,-1)
since start > end, -1 is returned
CASE 2 - going right till the last element
Say the array looks as follows a[] = {-20,-10,-5,-4,-3,30,80}
mid = (0+6)/2 = 3 , call fun(4,6)
mid = (4+6)/2 = 5 , call fun(6,6)
mid = (6+6)/2 = 6 , call fun(7,6)
since start > end, -1 is returned
此外,我觉得解决方案中给出的额外条件永远无法达到。
答案 0 :(得分:1)
你是对的&e;足够了。 S永远不会低于零,因为它要么保留要么等于(s + e)/ 2 + 1> = s + 1(因为e> = s),所以它总是大于或等于通过的初始值,即零。类似地,可以总是显示e <= n-1,因此额外条件是多余的。