给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?
一共2行输入。
第一行为一个整数n,2<=n<=10000, 第二行为n个数,,组成arr数组,0<=arr[i]<=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); } }