问题描述:

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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
  • 2022-12-23
  • 2021-10-20
  • 2021-06-20
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-04
  • 2021-07-04
  • 2022-12-23
  • 2022-03-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案