【问题标题】:ending condition in finding magic index in an array在数组中查找魔术索引的结束条件
【发布时间】: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


    【解决方案1】:

    你是对的 s>e 就足够了。 S 永远不会低于零,因为它要么被保留要么等于 (s+e)/2+1>=s+1(因为 e>=s),所以它总是大于或等于传递的初始值,即零.同样可以证明,e

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 2019-09-04
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多