【发布时间】:2015-07-24 20:12:27
【问题描述】:
我对以下问题所指的解决方案有疑问
数组 A[l.. .n-l] 中的魔法索引被定义为这样的索引 A[i] = i。给定一个由不同整数组成的排序数组,写一个 在数组 A 中查找魔法索引(如果存在)的方法。
我指的解决方案看起来像。假设“s”代表开始,“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
而且,我觉得解决方案中给出的额外条件永远无法达到。
- 我觉得 s
- 我也觉得 e >= array.length 是不可能的,因为我们从不向 'e' 添加任何东西。也许's'可以大于或等于array.length但不能'e'
【问题讨论】:
标签: arrays algorithm dynamic-programming binary-search