Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在数组中查找偶数_Algorithm_Function - Fatal编程技术网

Algorithm 在数组中查找偶数

Algorithm 在数组中查找偶数,algorithm,function,Algorithm,Function,给定一个长度为n的数组,其中最多包含e个偶数和a 函数isEven,如果输入为偶数和false,则返回true 否则,编写一个函数来打印 使用对isEven的调用次数最少的数组 我唯一能想到的就是做一个线性搜索,在我到达数组的末尾或找到e个偶数后停止搜索。谁能告诉我一个更好的方法吗?你可以用二进制搜索代替。编写执行以下操作的函数: 从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=楼

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


我唯一能想到的就是做一个线性搜索,在我到达数组的末尾或找到e个偶数后停止搜索。谁能告诉我一个更好的方法吗?

你可以用二进制搜索代替。编写执行以下操作的函数:

  • 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=楼层(n/2)
    • 如果
      isEven(L元素的乘积)
      ,则设置
      A=L
      n=k
    • 否则设置
      A=R
      n=n-k
  • 如果
    isEven(A[0])
    ,则返回
    A[0]
  • 否则,返回
    -1
为循环运行一个
,该循环最多有
e
次迭代。每次运行上述算法以查找偶数时,如果输出为
-1
stop,则没有更多要查找的内容。否则,打印输出,将其从数组中删除,并迭代至多
e
次试验

二进制搜索算法对
isEven
进行
log(n)
调用,您最多只能运行
e
次,因此总共有
e log(n)
调用
isEven


因此,您希望在
e log(n)
时采用这种方法,否则使用线性搜索,它将
n
调用
isEven

您已经做了什么,或者您希望我们为您做所有这些吗?我更新了我的问题。我能想到的最好办法就是线性搜索。你能告诉我有没有更好的方法吗?我们能用按位and吗?如果(!(arr[i]&1))打印arr[i]--我现在就走。@AmirAfghani,或者使用
!IsOdd(int)
:为什么不打印数组中的所有数字?问题并不是说你不能,而且它满足了答案,而没有调用isEven():ddosn,这难道不需要对数组进行排序吗?@VargaPéter怎么会这样?您正在测试所选的一半中是否有偶数。就这些。+1,狡猾,狡猾。这会给你一个比我实际回答“内存便宜,内存化”更好的分数。@RobinWelch我唯一优化的是“使用最少的调用次数”。我不认为这在任何其他意义上更好。@PengOne一个非常公平的观点-(给self一个心理提示,让他更仔细地阅读要求,而不是自己编造要求!):)