|
在书上找了一个问题,想了半天还是不得其解, 看看大家怎么想:
有个整数array, A[],有n个整数值。 现在想一个algorithm 用来找出这个array里的最大值和最小值, 但要求这个algorithm的最大comparisons的数必须小于3n/2, 换句话说, 如果你是用for (int i = 0; i < n; i++)就不行, 因为你最多用了n次比较, 如果是三个loop的话, 就是3n了, 这就违反了这个条件, 我看看书上给的提示是将这个array分成两个, 从A[0 -> 2/n - 1]是Amin[]; 而从A[2/n -> n - 1] 是Amax[]; 这样用loop解决就是n/2了, 但这给出个最大值, 即是只能用2次或者1次loop就要将这两个ARRAY里的最大值和最小值找到, 最后在互相对比, 选出A[]里面的最大值和最小值, 不知道有没有人有些方案呢? |
|