牛客题解 | 两两配对差值最小
题目
题解:
题目难度:二星
考察点: 贪心,排序,哈希
解法一:贪心+排序
将一个数列中的所有数两两配对并求和,在这些和中选出最大和最小值,使得二者差距最小。很显然就是要让所有的配对的和的大小尽量相等,试想一下,如果让大的和大的配对,小的和小的配对,那么最大值和最小值的差距将会进一步拉大,因此一种可行的贪心思路就是让大的尽量和小的配对,这样最大值和最小值的差距可以缩小,“和”的分布也会尽量平均。因此就会有如下解法,首先将数组从小打大进行排序,然后我们让第一个和最后一个配对,第二个和倒数第二个配对,如此下去。在配对的同时维护这些配对和的最小值和最大值,最后用最大值减去最小值就是所求,复杂度为\(O(nlog_2n)\)
#include "bits/stdc++.h"
using namespace std;
const int maxn=10000+1;
int n,a[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
int i=1,j=n;
int mx=INT_MIN,mi=INT_MAX;
while(i

浙公网安备 33010602011771号