[LeetCode]561.Array Partition I

简介

入坑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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值