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]
按照题意,实际上应该是数组元素的排序问题。排序完成后,从第一个元素隔一个求和。
注意:
1. vector 类模板提供了一对操作begin()和end() 它们分别返回指向向量开始处和结束处后1 个的迭代器。这一对迭代器合起来可以标记出待遍历元素的范围。
2.关于sort() 的用法 参考:https://blog.csdn.net/sunshangjin/article/details/40296357
class Solution { public: int arrayPairSum(vector<int>& nums) { sort(nums.begin(),nums.end()); //nums.begin()代表数组的起始地址;nums.end()代表数组的结束地址; sort(s1,s2)对s1到s2位置之间的数组元素进行排序,默认从小到大。 int sum=0; for(int i=0;i<nums.size();i+=2) //Line 6: stray '\357' in program 原因是输入的分号存在中文字符! 数组长度用nums.size()得到 { sum+=nums[i]; } return sum; } };