问题:
设A是一个整数大小为n的数组,其中 A[1] < A[2] < ... < A[n]
。
(注意,每个条目可以是正整数或负整数。)
O(log n)
,则提供一种算法,i
时间查找A[i] = i
i
,i
。如果不存在此类0
,则算法返回Ω(log n)
。 O(n)
。到目前为止,我只能找到一个花费O(log n)
时间的算法,这很容易,但我知道只有一个树结构可以是set
。
我是Algorithms的新手。
提前致谢。
答案 0 :(得分:3)
考虑一下i
a[i] > i
,其中j > i
=&gt;语句a[j] > j
A[1] < A[2] < ... < A[n].
同样适用于i
的任何a[i] < i
,对于任何j < i
=&gt; a[j] < j
也会出于同样的原因。
因此,我们可以在这里使用二进制搜索。 (对于选定的点p
,如果a[p] > p
,则继续左侧部分,如果a[p] < p
,则继续右侧部分)