同时寻找序列的最大最小值

问题描述:

给定一个长度为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;
    }

 

posted @ 2017-11-10 14:55  Qcer  阅读(532)  评论(0编辑  收藏  举报