1. 题目来源
2. 题目解析
比较好猜的贪心,最大和最小作为数对,一定和最小。
证明:
- 贪心方式: 从小到大排序,首尾组合作为数对。
- 反证法,如果一个最优解不是首尾组合的,设为
(a, d),(b, c)
,大小关系为a<=b<=d<=c
,则a+d<=b+c
,则数对最大值由b+c
提供。如果替换成(a, c),(b,d)
,数对最大值b+d<=b+c
,就变小了。 - 就一句话,一定可以调整成贪心解,并答案不会变差。
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)
代码:
二分, O ( n l o g n ) O(nlogn) O(nlogn),比较容易分析。
class Solution {
public:
int minPairSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
int res = -1e9;
for (int i = 0; i < n / 2; i ++ ) {
res = max(res, nums[i] + nums[n - 1 - i]);
}
return res;
}
};