问题描述:
给定一个长度为n(n>=2)的无序正整数序列ary,要求同时找到其中最大和最小值元素,并返回其和。
分析:
将最大值max和最小值min看成一对(mix,min),每次从序列中成对地取出两个元素,将其中较小者与min比较并更新,将其中较大者与max必将并更新,这样处理每一对元素只需要3次比较,整个序列可以分成大致n/2对,比较次数约为3n/2。
实现:
public static int getSumOfMaxAndMin(int[] ary){ int lenght = ary.length; int max,min,i; if (lenght%2 == 0) { max = ary[0]; min = ary[1]; i = 2; }else { max = min = ary[0]; i = 1; } for (; i < lenght; i+=2) { if (ary[i]<ary[i+1]) { if (ary[i]<min) {min = ary[i];} if (ary[i+1]>max) {max = ary[i+1];} }else { if (ary[i+1]<min) {min = ary[i+1];} if (ary[i]>max) {max = ary[i];} } } return max+min; }