[M贪心] lc1877. 数组中最大数对和的最小值(贪心+双周赛53_2)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[M贪心] lc1877. 数组中最大数对和的最小值(贪心+双周赛53_2)相关的知识,希望对你有一定的参考价值。
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;
}
};
以上是关于[M贪心] lc1877. 数组中最大数对和的最小值(贪心+双周赛53_2)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1877. 数组中最大数对和的最小值/剑指 Offer 52. 两个链表的第一个公共节点/146. LRU 缓存机制