【Leetcode】1877. Minimize Maximum Pair Sum in Array

题目地址:

https://leetcode.com/problems/minimize-maximum-pair-sum-in-array/

给定一个长 n n n数组 A A A n n n是偶数,要求将 A A A分为 n / 2 n/2 n/2个数对,使得和最大的那个数对之和最小,问这个最大的数对和是多少。

先将 A A A排序,假设 A [ i ] + A [ j ] A[i]+A[j] A[i]+A[j]的和是所有数对中最大的,那么对于 A [ k ] , k > j A[k],k>j A[k],k>j,这些数必须得与 A [ l ] , l < i A[l],lA[l],l<i的数配对,否则 A [ i ] + A [ j ] A[i]+A[j] A[i]+A[j]的和就不是最大的了,也就是说无论怎么配对,最大和一定是 A [ 0 ] + A [ n − 1 ] , A [ 1 ] + A [ n − 2 ] , A [ 2 ] + A [ n − 3 ] , . . . A[0]+A[n-1],A[1]+A[n-2],A[2]+A[n-3],... A[0]+A[n1],A[1]+A[n2],A[2]+A[n3],...其中之一,所以对撞双指针扫描一遍就行了。代码如下:

import java.util.Arrays;

public class Solution {
    public int minPairSum(int[] nums) {
        Arrays.sort(nums);
        int res = nums[0] + nums[nums.length - 1];
        for (int i = 0, j = nums.length - 1; i < j; i++, j--) {
            res = Math.max(res, nums[i] + nums[j]);
        }
        
        return res;
    }
}

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn),空间 O ( 1 ) O(1) O(1)

你可能感兴趣的:(LC,二分,位运算与数学,leetcode,算法)