一、题目
一个数对 (a,b) 的 数对和 等于 a + b 。最大数对和 是一个数对数组中最大的 数对和 。
- 比方说,如果我们有数对 (1,5) ,(2,3) 和 (4,4),最大数对和 为 max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8 。
给你一个长度为 偶数 n 的数组 nums ,请你将 nums 中的元素分成 n / 2 个数对,使得:
- nums 中每个元素 恰好 在 一个 数对中,且
- 最大数对和 的值 最小 。
请你在最优数对划分的方案下,返回最小的 最大数对和 。
点击查看原题
难度级别:中等(感觉应该是简单题才对)
二、思路
1)排序+贪心
根据常规思维,数组中的两个数成为一个数对,要使最大数对和尽可能小,那么最大的数字就要搭配最小数字,这个可以证明一下:
假设最大数为max,最小数为min,另有一个数对(a, b),max>a>b>min,那么有max+b>max+min>a+min
所以排序后,遍历数组,每次取头尾两个元素,找到最大数对和
三、代码
1)排序+贪心
class Solution {
public int minPairSum(int[] nums) {
int ans = 0;
Arrays.sort(nums);
for (int i = 0; i < nums.length/2; i++) {
ans = Math.max(ans, nums[i] + nums[nums.length - 1- i]);
}
return ans;
}
}
时间复杂度为O(nlogn)
,空间复杂度为O(logn)