简介
入坑LeetCode才发现自己阅读理解能力差到令人发指的程度,这道题目说来惭愧上网查过才知道让我什么(手动摊手)。言归正传,这道题目的意思是将2n个数划分为n组,每组两个数,划分的规则是分别取每一对数字中较小的数,保证这n个数的和最大。
比如给了6个数[1 5 6 4 2 3],那么符合要求的分组为[1 2] [3 4] [5 6],输出的最大值为1+3+5=9。
思路
http://blog.csdn.net/whl_program/article/details/70667333 中从数学层面给出了推理,得到了划分的规则。
按照这个规则,那么就需要从小到大依次进行分组即可。那么整个算法的流程就是对所给数组进行排序,然后从第一个数开始每隔一个数字进行求和,返回最终的和值即可。
其中排序可以直接用STL标准库中的sort函数,其执行效率为nlog2n,参数为三个,分别是开始地址,结束地址(前闭后开)以及排序方式(默认为升序)。
代码
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int sum = 0;
for(int i=0; i<(nums.size()/2) ;++i)
{
sum += nums[2*i];
}
return sum;
}
};