561. Array Partition I
2017-11-30 19:20
417 查看
原题链接
算法证明:
假设在任意一对
标记
标记
标记
因此
所以这个问题就转化成为寻找数据对使得
public class Solution { public int arrayPairSum(int[] nums) { Arrays.sort(nums); int result = 0; for (int i = 0; i < nums.length; i += 2) { result += nums[i]; } return result; } }
算法证明:
假设在任意一对
i中,
bi >= ai
标记
Sm = min(a1, b1) + min(a2, b2) + ... + min(an, bn),当
Sm最大时即为本题的解。根据
1规则,
Sm = a1 + a2 + ... + an
标记
Sa = a1 + b1 + a2 + b2 + ... + an + bn,
Sa是根据所给输入的一个常数。
标记
di = |ai - bi|,根据
1规则,
di = bi - ai。标记
Sd = d1 + d2 + ... + dn
因此
Sa = a1 + a1 + d1 + a2 + a2 + d2 + ... + an + an + dn = 2Sm + Sd就可以转换为
Sm = (Sa - Sd) / 2,若想使得
Sm最大,且
Sa是一个常数。我们需要让
Sd为最小。
所以这个问题就转化成为寻找数据对使得
di的和最小。显然相邻元素之间的
di最小。
相关文章推荐
- 数组-leetcode 561 Array Partition I
- leetcode-561-Array Partition I
- 561. Array Partition I
- LeetCode-561-Array Partition I-E
- leetcode 561 Array Partition I
- 561. Array Partition I
- Leetcode 561 Array Partition I
- 561. Array Partition I
- leetcode 561 Array Partition I
- 561. Array Partition I
- [leetcode 561]Array Partition I
- 561. Array Partition I
- 561. Array PartitionI
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I。
- 561. Array Partition I
- 561. Array Partition I
- 561. Array Partition I