给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
示例 1:
输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).
提示:
- n 是正整数,范围在 [1, 10000].
- 数组中的元素范围在 [-10000, 10000].
class Solution {
public static int arrayPairSum(int[] nums) {
int sum=0;
quickSort(nums,0,nums.length-1);
for (int i=0;i<nums.length;i+=2)
sum+=nums[i];
return sum;
}
public static void quickSort(int arr[],int low,int high)
{
if(high-low<1)
return;
int l=low;
int h=high;
int key=arr[l];
boolean flag=true;
L1: while (l<h)
{
if(flag)
{
for (int i =h;i>l;i--)
if(arr[i]<key)
{
arr[l]=arr[i];
l++;
h=i;
flag=!flag;
continue L1;
}
h=l;
}
else
{
for(int i=l;i<h;i++)
if (arr[i]>key)
{
arr[h]=arr[i];
h--;
l=i;
flag=!flag;
continue L1;
}
l=h;
}
}
arr[l]=key;
quickSort(arr,low,l-1);
quickSort(arr,l+1,high);
}
}
排序之后计算偶数索引上的数字和就行。