原题:
Given an array of
2n integers, your task is to group these integers into
n pairs of integer, say (a
1, b
1), (a
2, b
2), ..., (a
n, b
n) which makes sum of min(a
i, b
i) for all i from 1 to n as large as possible.
Example 1:
Input: [1,4,3,2] Output: 4 Explanation: n is 2, and the maximum sum of pairs is 4 = min(1, 2) + min(3, 4).
Note:
- n is a positive integer, which is in the range of [1, 10000].
- All the integers in the array will be in the range of [-10000, 10000].
题目意思:给你一个2n个数的数组,你要给他们做个两两配对,如(a1,b1)之类的,然后取出每一队里的最小的那个值,总共取出n个出来,让这n个值的和最大。
思路:先给数组排序,然后再按顺序两两分组,这样就可以让损失最小,从而最后取出的n个数之和最大。 因为取出来的是小的那个值,舍弃的是大的那个值,假设ai<bi,那损失loss=bi-ai,要让它最小,也就是要让bi 最接近ai,所以先排序,然后从最小的元素开始找到与它最接近的那个数,这样配对,loss最小,之后的都按这样的规则配对,最后总损失最小,从而总和最大。
我的做法:
import java.util.Arrays;
class Solution {
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);
int sum = 0;
int i =0;
while(i<(nums.length)){
sum += nums[i];
i += 2;
}
return sum;
}
}
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);
int sum = 0;
int i =0;
while(i<(nums.length)){
sum += nums[i];
i += 2;
}
return sum;
}
}