Algorithm 在数组中查找偶数
给定一个长度为n的数组,其中最多包含e个偶数和a 函数isEven,如果输入为偶数和false,则返回true 否则,编写一个函数来打印 使用对isEven的调用次数最少的数组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=楼
我唯一能想到的就是做一个线性搜索,在我到达数组的末尾或找到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一个心理提示,让他更仔细地阅读要求,而不是自己编造要求!):)