20.最大N个数和最小N个数的和

给定一个数组,编写一个函数,来计算他的最大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

 

查看代码

import java.util.*;

public class Demo20 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int m = Integer.parseInt(sc.nextLine());
        String[] split = sc.nextLine().split(" ");
        int n = Integer.parseInt(sc.nextLine());

        TreeSet<Integer> set = new TreeSet<>();
        for(String s : split){
            set.add(Integer.parseInt(s));
        }

        if(set.size() < 2 * n){
            System.out.println(-1);
            return ;
        }

        int sum = 0;
        Integer[] ints = new Integer[set.size()];
        set.toArray(ints);
        for(int i = 0; i < n; i++){
            sum += ints[i] + ints[set.size() - 1 - i];
        }
        System.out.println(sum);
    }
}

 

关键了解好 TreeSet的特性!

 

posted @ 2022-03-26 11:54  Jukim  阅读(1181)  评论(0编辑  收藏  举报