A[x,...,y]
是整数数组,x,y 是 >= 1 的自然数,并且 x <= y
.
Foo(Array,x,y)
if (x=y): return Array[x]
else:
m=(x+y)/2
return min(Foo(Array,x,m), Foo(Array(m+1),y)
我正在尝试找出如何编写这段代码的非递归版本,以在未排序的数组中找到最小值。
我试过使用 while 循环 where (x != y) 但我无法弄清楚如何移动 m 直到它到达 x = y 的位置并终止并返回最小值。我也想知道是否可以在不弹出 m 和 m+1 的最大值的情况下完成
最佳答案
如果你想找到一根棍子的质心(你可以用一根手指平衡它的点),只需用两根手指将它举起来,然后慢慢地一起移动。
类似的方法适用于查找数组中的最小元素:
findMin(Arr,x,y):
while(x < y):
if (Arr[x] < Arr[y])
y-=1
else
x+=1
return Arr[x]
关于algorithm - 最小搜索的非递归版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46349522/