数组拆分I

LeetCode题目,561. Array Partition I

先看题目描述

ycV2rj.png

大意就是给定一个有 2n 个元素的数组 nums,将数组拆分成 n 对,使得每对元素的最小值之和最大,返回该值

算法和思路

贪心

对于数组 nums,我们首先考虑里面的最小值,设为 min,由于 min 是 nums 中最小的,因此无论哪个元素和它放在一对,从这对中选择的数都是 min,即 min 会牺牲掉一个比它大的数,我们肯定希望这种牺牲尽可能小,因此将第二小的元素与 min 放在一对。对于剩下的元素,也是进行相同的考虑。因此我们可以将 nums 按照升序排列,然后选择所有偶数下标的元素,将值相加即可得到答案

算法源码

贪心

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int arrayPairSum(int[] nums) {
int len = nums.length;
int res = 0;
Arrays.sort(nums);
for (int i = 0; i < len; i += 2) {
res += nums[i];
}
return res;
}
}