1. 整体思路
核心问题
我们需要将一个长度为偶数的数组 nums 中的元素两两配对,使得所有数对和中的最大值尽可能小。
算法逻辑:贪心策略
- 直觉:
- 为了让数对和的最大值尽可能小,我们需要避免'大数 + 大数'的情况(这会产生极大的和)。
- 最好的策略是让最大的数去中和最小的数。
- 也就是:第 1 小 + 第 1 大,第 2 小 + 第 2 大,…,第 k 小 + 第 k 大。
- 这种'首尾配对'的策略可以平均化每对的和,从而压低最大值的上界。
- 具体步骤:
- 排序:首先对数组进行升序排序。
- 双指针/首尾遍历:使用一个循环,同时取数组最左边(较小)和最右边(较大)的元素进行求和。
- 更新最大值:在遍历过程中,记录下所有配对和中的最大值。
2. 完整代码
import java.util.Arrays;
class Solution {
public int minPairSum(int[] nums) {
// 1. 排序
// 将数组按从小到大排序,以便使用贪心策略
// 排序是本算法最耗时的步骤
Arrays.sort(nums);
int n = nums.length;
int max = 0; // 记录遍历过程中的最大数对和
// 2. 首尾配对遍历
// 只需要遍历前半部分 (0 到 n/2 - 1)
// 第 i 个元素 (较小值) 与 第 n-1-i 个元素 (较大值) 配对
for (int i = 0; i < n / 2; i++) {
int left = nums[i]; // 当前这一对中的最小值
nums[n - i - ];
max = Math.max(left + right, max);
}
max;
}
}

