题目28

            给定一个数组
            编写一个函数
            来计算他的最大N个数和最小N个数的和
            需要对数组进行去重

            说明
            第一行输入M
            M表示数组大小
            第二行输入M个数
            表示数组内容
            第三行输入N表示需要计算的最大最小N的个数

            输出描述
            输出最大N个数和最小N个数的和

            例一:
                输入
                5
                95 88 83 64 100
                2

                输出
                342

                说明
                最大2个数[100 95] 最小2个数[83 64]
                输出342

             例二
                输入
                5
                3 2 3 4 2
                2

                输出
                 -1
                 说明
                 最大两个数是[4 3]最小2个数是[3 2]
                 有重叠输出为-1
<?php
$m=trim(fgets(STDIN));
$arr=explode(' ',trim(fgets(STDIN)));
$n=trim(fgets(STDIN));
solution($arr,$n);

function solution($arr,$n)
{
    $arr=array_unique($arr);
    if(count($arr)>=2*$n){//去重后2倍的n个数一定不重复
        sort($arr);
        $max_arr=[];
        $min_arr=[];
        for ($i=0;$i<$n;$i++){
            $min_arr[]=$arr[$i];
        }
        for ($j=count($arr)-1;$j>count($arr)-1-$n;$j--){
            $max_arr[]=$arr[$j];
        }
        echo array_sum($min_arr)+array_sum($max_arr);
        return;
    }
    echo -1;
}

function solution1($arr,$n){
$arr=array_unique($arr);
$res=-1;
if(count($arr)>2*$n){
sort($arr);
for ($i=0;$i<count($arr);$i++){
if($i<$n||$i>count($arr)-$n-1){
$res+=$arr[$i];
}
}
}
echo $res;
}
 

 

posted @ 2022-07-19 11:03  weigm*  阅读(47)  评论(0)    收藏  举报