题目来源:链接: [https://leetcode-cn.com/problems/array-partition-i/].
561.数组拆分 I
1.问题描述
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
示例1:
输入: [1,4,3,2]
输出: 4
解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).
注意:
1. n 是正整数,范围在 [1, 10000].
2. 数组中的元素范围在 [-10000, 10000].
2.我的解决方案
这道题有点田忌赛马的影子,题的关键是 : 谁与谁组队相比较的问题。
- 由于求最大的值,所以我们要尽可能的保留大的值。
- 如果最大+最小,第二大+第二小,就会直接把最大和第二大的数舍去了。
- 如果最大与第二大组队就可以保留第二大的数字。
- 以此类推,我们只需要排序之后,相邻之间组队就可以留下较大的值。
代码如下:
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),