题目描述
给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重
说明:
- 数组中数字范围[0,1000]
- 最大N个数与最小N个数不能有重叠,如有重,输入非法返回-1
- 输入非法返回-1
输入描述
- 第一行输入M,M标识数组大小
- 第二行输入M个数,标识数组内容
- 第三行输入N,N表达需要计算的最大、最小N个数
输出描述
- 输出最大N个数与最小N个数的和
public class 最大N个数与最小N个数的和 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer n = Integer.valueOf(sc.nextLine());
TreeSet<Integer> set = new TreeSet<>();
for (int i = 0; i < n; i++) {
int var = sc.nextInt();
if (var < 0 || var > 1000){
System.out.println(-1);
return;
}
set.add(var);
}
int num = sc.nextInt();
if (num < 0){
System.out.println(-1);
return;
}
if (set.size() < 2*num){
System.out.println(-1);
return;
}
int sum = 0;
Iterator<Integer> iterator = set.iterator();
for (int i = 0; i < num; i++) {
sum += iterator.next();
}
Iterator<Integer> integerIterator = set.descendingIterator();
for (int i = 0; i < num; i++) {
sum += integerIterator.next();
}
System.out.println(sum);
}
}