最大N个数与最小N个数的和
题目描述
给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。
说明:
- 数组中数字范围[0, 1000]
- 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1
- 输入非法返回-1
输入描述
- 第一行输入M, M标识数组大小
- 第二行输入M个数,标识数组内容
- 第三行输入N,N表达需要计算的最大、最小N个数
输出描述
输出最大N个数与最小N个数的和
用例
输入 | 5 |
输出 | 342 |
说明 | 最大2个数[100,95],最小2个数[83,64], 输出为342。 |
输入 | 5 |
输出 | -1 |
说明 | 最大2个数[4,3],最小2个数[3,2], 有重叠输出为-1。 |
解析
典型的逻辑处理题型,需要掌握字符串拆分,排序等知识点。
示例代码Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
//5
//95 88 83 64 100
//2
public class T52 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> numList = new ArrayList<>();
int count = Integer.parseInt(sc.nextLine());
Arrays.stream(sc.nextLine().split(" ")).forEach(s -> {
if (!numList.contains(Integer.parseInt(s)))
numList.add(Integer.parseInt(s));
});
numList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 > o2)
return 1;
if (o1 < o2)
return -1;
return 0;
}
});
int num = Integer.parseInt(sc.nextLine());
List<Integer> num1 = new ArrayList<>();
num1 = numList.subList(0, num);
System.out.println(num1);
boolean flag = false;
List<Integer> num2 = new ArrayList<>();
num2 = numList.subList(numList.size() - num, numList.size());
System.out.println(num2);
for (int i = 0; i < num1.size(); i++) {
if (num2.contains(num1.get(i))) {
System.out.println("-1");
flag = true;
break;
}
}
if (!flag) {
int sum[] = new int[1];
num1.stream().forEach(s -> {
sum[0] += s;
});
num2.stream().forEach(s -> {
sum[0] += s;
});
System.out.println(sum[0]);
}
}
}
代码运行示例