我唯一能想到的就是进行线性搜索,并在到达数组末尾或找到偶数后停止。有人可以告诉我更好的方法吗?
最佳答案
您可以改为执行二进制搜索。编写一个执行以下操作的函数:
A = array
和n = length(A)
开头。 n>1
L = [A[0],A[1],...,A[k-1]]
和R = [A[k],A[k+1],...,A[n-1]]
,其中k = floor(n/2)
isEven(product of elements of L)
,则设置A=L
和n = k
,A=R
和n = n-k
。 isEven(A[0])
,则返回A[0]
,-1
。 运行
for
循环,该循环最多具有e
迭代次数。每次运行以上算法以查找偶数时,如果输出为-1
stop,则没有更多可查找的内容。否则,打印输出,将其从数组中删除,并重复进行最多e
试用。二进制搜索算法将
log(n)
调用带给isEven
,并且您必须最多运行e
一次,因此,总共有e log(n)
调用给isEven
。因此,无论何时使用
e log(n) < n
,您都希望采用这种方法,否则请使用线性搜索,该搜索会将n
调用带给isEven
。