题目:
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].
翻译:
给定一个包含2n个数字的数组,你的任务是将这些数字组成n对,即
(a
1
, b
1
), (a
2
, b
2
), ..., (a
n
, b
n
) 使得
min(a
i
, b
i
)的和尽可能的大,其中 i 从 1到n。
例子 1:
输入: [1,4,3,2]
输出: 4
解释: n是2,这两对的最大和为 = min(1, 2) + min(3, 4)。
注意:
- n是一个整数,范围在[1,10000]。
- 数组中的所有数字都在范围[-10000,10000]。
思路:
先将所有数字从小到大进行排序,然后前后两两一组,可以获得最大的和。#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
int sum = 0;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size();) {
sum += min(nums[i], nums[i + 1]);
i = i + 2;
if (i > nums.size())
break;
}
return sum;
}
};
int main()
{
Solution s;
vector<int> nums = { 1,4,2,3 };
int result;
result = s.arrayPairSum(nums);
cout << result;
return 0;
}