给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
一共2行输入。
第一行为一个整数n,2<=n<=10000, 第二行为n个数,组成目标数组,每个数大于等于2,小于等于100。
输出最小的差值。
4 2 6 4 3
1
6 11 4 3 5 7 1
3
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Collections;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
List<Integer> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(in.nextInt());
}
Collections.sort(arr);
//
int mi = 200 + 5;
int mx = -1;
int i = 0, j = n - 1;
while (i < j) {
int k = arr.get(j) + arr.get(i);
mi = Math.min(mi, k);
mx = Math.max(mx, k);
i++;
j--;
}
System.out.print(mx - mi);
}
}
} import java.util.Scanner;
import java.util.Arrays;
import java.lang.Math;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i] = in.nextInt();
}
Arrays.sort(nums);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int left = 0;
int right = n-1;
while(left<right){
int sum = nums[left]+nums[right];
max = Math.max(max,sum);
min = Math.min(min,sum);
left++;
right--;
}
System.out.println(max-min);
}
}