标签(空格分隔): leetcode
1. 原题
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.
2. 分析
- 2n个元素分为n组, 要使最小值的和最大,考虑到排序后,每相邻的2个元素之间总是取较小者
- 要使和最大,必须要尽量使组间的差较小,这样在取较小者的时候不会浪费大数,所以只要排序,取下标为偶数的就好
3. 代码
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
vector<int>::iterator start = nums.begin();
vector<int>::iterator end = nums.end();
sort(start, end);
int i = 0;
int sum = 0;
while (i < nums.size()){
sum += nums[i];
i+=2;
}
return sum;
}
};