我正在尝试编写一个采用线性数组的算法,从最低到最高排序。如果arr [i] - arr [j] = 160,它应该返回值的位置。
我的问题是运行时应该是O(n)。
如果我使用从最高到最低的数组元素的for循环,并且每个元素使用二进制搜索搜索适当的数组元素,则运行时仍为O(n log2 n)。
如何将复杂性降低到O(n)?
答案 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++