Spurs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Given an array of 2n integers, your task is to group these integers into n pairs of integer, say \((a_1, b_1), (a_2, b_2), ..., (a_n, b_n)\) which makes sum of \(min(a_i, b_i)\) 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:

  1. n is a positive integer, which is in the range of [1, 10000].
  2. All the integers in the array will be in the range of [-10000, 10000].

自家代码:
先排序, 索引为偶数元素求和.
副产品为: vector的排序方式 sort(A.begin(), A.end()).
\(O(nlogn)\) time, \(O(1)\) extra space.

int arrayPairSum(vector<int>& A) {
    sort(A.begin(), A.end());
    int sum = 0;
    for (int i = 0; i < A.size(); i += 2) {
        sum += A[i];
    }
    return sum;
}
posted on 2017-08-14 23:00  英雄与侠义的化身  阅读(84)  评论(0编辑  收藏  举报