我的算法是这样的:
- p = 0
- 如果(A [p] == x)则idx = p并且算法完成,否则转到下一步
- 设置p + = | xA [p] |
- 转到2。
说A [p]> x。然后,由于A项增加或减少1,因此idx至少可以确定与p的索引(A[p]-x)。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(logn),但不确定)。运行时间:在所有情况下,绝对比线性搜索好。



