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.
Solution
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;
class Solution{
public:
int arrayPairSum(vector<int> & nums){
int size = nums.size();
if (size==0) return 0;
sort(nums.begin(), nums.end());
int res =0;
for(int i=0;i<size;i+=2){
res += nums[i];
}
return res;
}
};
TEST_CASE("arrayPairSum", "[arrayPairSUm]"){
auto a = vector<int> {1, 4, 3,2};
Solution so;
REQUIRE(so.arrayPairSum(a)==4);
}
需要文件catch.hpp
➜ Array g++ -std=c++11 561ArrayPartition.cpp
➜ Array ./a.out
===============================================================================
All tests passed (1 assertion in 1 test case)