给定一个长度为n的数组,其中包含至多e个偶数和a function isEven如果输入是偶数和false则返回true 否则,写一个打印所有偶数的函数 使用isEven调用次数最少的数组。
我唯一能想到的就是进行线性搜索并在我到达数组末尾或找到偶数后停止。有人可以告诉我一个更好的方法吗?
答案 0 :(得分:16)
您可以改为进行二分查找。编写执行以下操作的函数:
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
停止,则没有更多要查找。否则,打印输出,将其从数组中删除,并迭代最多e
次试验。
二进制搜索算法对log(n)
进行isEven
次调用,您必须最多e
次运行,因此e log(n)
次调用isEven
次1}}。
因此,您希望在e log(n) < n
时采用此方法,否则请使用线性搜索,该搜索会对n
进行isEven
次调用。