在数组中查找偶数

时间:2011-12-20 22:46:38

标签: algorithm function

  

给定一个长度为n的数组,其中包含至多e个偶数和a   function isEven如果输入是偶数和false则返回true   否则,写一个打印所有偶数的函数   使用isEven调用次数最少的数组。

我唯一能想到的就是进行线性搜索并在我到达数组末尾或找到偶数后停止。有人可以告诉我一个更好的方法吗?

1 个答案:

答案 0 :(得分:16)

您可以改为进行二分查找。编写执行以下操作的函数:

  • A = arrayn = 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=Ln = k
    • 另行设置A=Rn = 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次调用。