Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) 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].
Solution
classSolution {public:intarrayPairSum(vector<int>& nums) {sort(nums.begin(),nums.end());int n =nums.size();int sum =0;for(int i =0; i < n; i +=2) sum +=nums[i];return sum; }};
Rough proof
For any optimal solution, sort the pairs by the smaller number of each pair in ascending order. Suppose the sorted pairs are (a1,b1),...,(an,bn). Without loss of generality, assume ai≤bi.
We claim that bi≤ai+1 .
Suppose there is an optimal solution that has a group of two pairs (ai,bi) and (ai+1,bi+1), such that bi>ai+1. We can re-group the four numbers to increase the total sum, i.e., (ai,ai+1),(bi,bi+1). A contradiction.