拼多多2019秋招部分编程题
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,
请问该如何两两配对,才能让最大值和最小值的差值最小?
输入格式
一共2行输入。
第一行为一个整数n,2<=n<=10000, 第二行为n个数,组成目标数组,每个数大于等于2,小于等于100。
输出格式
输出最小的差值。
输入样例
6
11 4 3 5 7 1
输出样例
3
思路:先排序,每次的最小值找最大值相加,这样就可以使相加后的最大值和最小值的差最小
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
int i;
int a[n+1];
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
int maxi=0,mini=a[1]+a[n];
for (i=1;i<=n/2;i++)
{
if (maxi<a[i]+a[n-i+1])
maxi=a[i]+a[n-i+1];
if (mini>a[i]+a[n-i+1])
mini=a[i]+a[n-i+1];
}
printf("%d",maxi-mini);
return 0;
}