华为od(D卷)最大N个数和最小N个数的和
文章目录
- 题目描述
- 输入描述
- 输出描述
- 示例1
- 示例2
- 思路
- 代码
题目描述
给定一个数组,编写一个函数,来计算他的最大N个数和最小N个数的和,需要对数组进行去重
输入描述
第一行输入M,M表示数组大小
第二行输入M个数,表示数组内容
第三行输入N表示需要计算的最大最小N的个数
输出描述
输出最大N个数和最小N个数的和
示例1
输入
5
95 88 83 64 100
2
输出
342
说明:最大2个数[100 95] 最小2个数[83 64],输出342
示例2
输入
5
3 2 3 4 2
2
输出
-1
说明:最大两个数是[4 3]最小2个数是[3 2],有重叠输出为-1
思路
去重: 利用set
最大,最小: 排序。
排序+去重:TreeSet
代码
public class Demo02 {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextInt()) {TreeSet<Integer> treeSet = new TreeSet<>();int m = in.nextInt();for (int i = 0; i < m; i++) {treeSet.add(in.nextInt());}int n = in.nextInt();if (treeSet.size() < 2 * n) {System.out.println(-1);return;}int sum = 0;for (int i = 0; i < n; i++) {sum += treeSet.first();treeSet.remove(treeSet.first());sum += treeSet.last();treeSet.remove(treeSet.last());}System.out.println(sum);}in.close();}
}