O(n)算法,如果条件为真,则返回数组索引

时间:2016-01-06 18:23:14

标签: algorithm search

我正在尝试编写一个采用线性数组的算法,从最低到最高排序。如果arr [i] - arr [j] = 160,它应该返回值的位置。

我的问题是运行时应该是O(n)。

如果我使用从最高到最低的数组元素的for循环,并且每个元素使用二进制搜索搜索适当的数组元素,则运行时仍为O(n log2 n)。

如何将复杂性降低到O(n)?

1 个答案:

答案 0 :(得分:3)

可以使用两个迭代器i,j完成,i > j总是如此,如果i则增加arr[i] - arr[j] > 160,如果{j增加arr[i] - arr[j] < 160 {1}}(如果等于160,则中止)。

i = 1
j = 0
while (i < n):
   if (arr[i] - arr[j] == 160:
      // found it!
   else if (arr[i] - arr[j] < 160):
      i++
   else:
      j++