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;
}
莫愁前路无知己,天下谁人不识君