01-最大N个数和最小N个数的和

题目

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

说明:
*数组中数字范围[0, 1000]
*最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
*输入非法返回-1

思路

很明显这是一个数组排序题,并且需要去重,因此很容易想到set集合,能很容易帮我们去重,排序问题我们可以使用TreeSet数据结构的自然排序,这样问题就解决了

代码

    public static int topic1(){
        Scanner sc = new Scanner(System.in);
        //1.读取输入
        int m = Integer.parseInt(sc.nextLine());
        String[] splits = sc.nextLine().split(" ");
        int n = Integer.parseInt(sc.nextLine());
        //2.对数组去重并排序
        TreeSet<Integer> ts = new TreeSet<>();
        for (String i : splits){
            ts.add(Integer.parseInt(i));
        }
        //3.判断是否非法
        if (ts.size() < 2 * n){
            return -1;
        }
        //4.计算结果
        int result = 0;
        Integer[] array = new Integer[ts.size()];
        ts.toArray(array);
        for (int i = 0;i < n;i++){
            result += array[i] + array[ts.size() - 1 - i];
        }
        System.out.println(result);
        return result;
    }
posted @ 2024-07-19 23:38  Arthur-Morgan  阅读(47)  评论(0编辑  收藏  举报