题目描述
输入描述
* 第一行输入M,为数组的大小
* 第二行输入M个数,为数组内容,数大小在[0.1000]
* 第三行输入N,N表达需要计算的最大与最小个数
输出描述
* 输出最大N个数和最小N个数之和,有重复值返回-1
import java.util.*;
//最大N个数与最小N个数之和
public class MaxSum {
public static void main(String[] args) {
//输入描述
//第一行输入M,为数组的大小
//第二行输入M个数,为数组内容
//第三行输入N,N表达需要计算的最大与最小个数
//输出描述
//输出最大N个数和最小N个数之和
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数组的大小:");
int m=scanner.nextInt();
int[] arr=new int[m];
System.out.println("请输入m个整数,中间以空格分开");
for(int i=0;i<m;i++){
arr[i]=scanner.nextInt();
}
System.out.println("请输入需要计算的最大和最小的N个数");
int n=scanner.nextInt();
judge(arr,m,n);
}
private static int judge(int[] arr, int m, int n) {
HashSet<Integer> set=new HashSet<>();
for(int x:arr){
if(x<0 || x>1000){
System.out.println(-1);
return -1;
}else {
set.add(x);
}
}
if(set.size()<2*n){
System.out.println(-1);
return -1;
}
return compute(set,n);
}
private static int compute(HashSet<Integer> set, int n) {
Integer[] y=set.toArray(new Integer[0]);
//为升序排序:(c,b)->c-b,降序排序 :(c,b)->b-c
Arrays.sort(y,(c,b)->c-b);
int sum=0;
int max=y.length-n;
int min=n-1;
while(min>=0){
sum=sum+y[min];
min--;
}
while(max<y.length){
sum=sum+y[max];
max++;
}
System.out.println("总数为:"+sum);
return sum;
}
}