在数组中搜索具有前面元素的每个元素+1或-1的数字

时间:2014-02-02 18:09:19

标签: algorithm search language-agnostic

整数数组包含的元素使得每个元素比其前一个元素多1个或更少。现在我们给出一个数字,我们需要确定该数字在数组中首次出现的索引。 需要优化线性搜索。它不是作业。

3 个答案:

答案 0 :(得分:1)

我的算法是这样的:

  1. p = 0时
  2. 如果(A [p] == x)则idx = p且算法完成,否则转到下一步
  3. 设置p + = | x-A [p] |
  4. 转到2。
  5. 说A [p]> X。然后,由于A项增加或减少1,idx肯定至少(A [p] - x)指数远离p。同样的原则适用于A [p]< X

    int p=0, idx=-1;
    while (p<len && p>=0)
       if (A[p]==x)
           idx = p;
       else
           p+= abs(x-A[p]);
    

    时间复杂度:最坏的情况是O(n)。我希望平均情况比O(n)好(我认为它是O(log n)但不确定)。 运行时间:绝对优于所有情况下的线性搜索。

答案 1 :(得分:0)

你不能比线性更快。以下代码应该尽可能快:

int findFirstIndex(int num, int[] array) {
     int i = 0;
     while (i< array.length)
          if (array[i] == num) return i;
          else i += abs(array[i] - num)
     return -1
}

但在最坏的情况下,它仍然是O(array.length)。例如,如果您在仅包含0的数组中查找1,那么您就不能跳过任何位置。

答案 2 :(得分:0)

从第一个位置开始;现在考虑搜索到的数字N和第一个数字之间的差异。如果array [0] == N那么我们就完成了;否则我们必须跳过abs(array [0] -N)的位置;现在重复此操作直到数组结束。