取决于你所说的“最佳”。从理论的角度来看,解决问题的时间比O(n)
确定性图灵机少。
天真的算法太循环和更新最小值,最大值。但是,如果您想同时获得 min,max,递归解决方案将需要比朴素算法更少的比较(由于函数调用开销,它不一定更快)。
struct MinMax{
public int Min,Max;
}
MinMax FindMinMax(int[] array, int start, int end) {
if (start == end)
return new MinMax { Min = array[start], Max = array[start] };
if (start == end - 1)
return new MinMax { Min = Math.Min(array[start], array[end]), Max = Math.Max(array[start], array[end]) } ;
MinMax res1 = FindMinMax(array, start, (start + end)/2);
MinMax res2 = FindMinMax(array, (start+end)/2+1, end);
return new MinMax { Min = Math.Min(res1.Min, res2.Min), Max = Math.Max(res1.Max, res2.Max) } ;
}
最简单的解决方案是排序并获取第一个和最后一个项目,尽管它显然不是最快的;)
在性能方面,找到最小值或最大值的最佳解决方案是您编写的简单算法(使用单个循环)。