18966 两两配对差值最小
Description
拼多多2019秋招部分编程题
给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,
请问该如何两两配对,才能让最大值和最小值的差值最小?
输入格式
一共2行输入。
第一行为一个整数n,2<=n<=10000, 第二行为n个数,组成目标数组,每个数大于等于2,小于等于100。
输出格式
输出最小的差值。
输入样例
6
11 4 3 5 7 1
输出样例
3
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;
/*贪心:找尽量大的最小值和,尽量小的最大值和
即尽可能让大的和小的配对,这样最大值和最小值的差距才会缩小,数对之和的分布也会尽可能平均。 */
int main()
{
ios::sync_with_stdio(false);
int n,mi = 10001,ma = -10001,sum;
cin >> n;
int a[n+5];
for(int i = 0;i < n;i++){
cin >> a[i];
}
sort(a,a+n);//排序,更方便找到
//两边同时遍历取一个尽量小的和一个尽量大的数
for(int i = 0,j = n -1 ;i < j;i++,j--){
sum = a[i] + a[j];
mi = min(mi,sum);//最小值和
ma = max(ma,sum);//最大值和
}
cout << ma - mi << endl;
return 0;
}