📜  配对形成,以使最大配对和最小化

📅  最后修改于: 2021-05-06 22:08:40             🧑  作者: Mango

给定大小为2 * N整数的数组。将阵列分成N对,这样最大的对和就被最小化了。换句话说,将阵列最佳划分为N个对应该导致最大对和,这是所有可能性中其他最大对和的最小值。
例子:

方法:想法是首先对给定的数组进行排序,然后遍历循环以形成对(i,j),其中i从0开始,j从数组的末尾开始。将i递增,将j递减,以形成下一个对,依此类推。
下面是上述方法的实现。

C++
// CPP Program to divide the array into
// N pairs such that maximum pair is minimized
#include 
 
using namespace std;
 
void findOptimalPairs(int arr[], int N)
{
    sort(arr, arr + N);
 
    // After Sorting Maintain two variables i and j
    // pointing to start and end of array Such that
    // smallest element of array pairs with largest
    // element
    for (int i = 0, j = N - 1; i <= j; i++, j--)
        cout << "(" << arr[i] << ", " << arr[j] << ")" << " ";
}
 
// Driver Code
int main()
{
    int arr[] = { 9, 6, 5, 1 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    findOptimalPairs(arr, N);
    return 0;
}


Java
// Java Program to divide the array into
// N pairs such that maximum pair is minimized
import java.io.*;
import java.util.Arrays;
 
class GFG {
     
static void findOptimalPairs(int arr[], int N)
{
    Arrays.sort(arr);
 
    // After Sorting Maintain two variables i and j
    // pointing to start and end of array Such that
    // smallest element of array pairs with largest
    // element
    for (int i = 0, j = N - 1; i <= j; i++, j--)
        System.out.print( "(" + arr[i] + ", " + arr[j] + ")" + " ");
}
 
    // Driver Code
    public static void main (String[] args)
    {
        int arr[] = {9, 6, 5, 1};
        int N = arr.length;
 
        findOptimalPairs(arr, N);
    }
}
 
// This code is contributed by anuj_67.


Python3
# Python 3 Program to divide the array into
# N pairs such that maximum pair is minimized
 
def findOptimalPairs(arr, N):
    arr.sort(reverse = False)
 
    # After Sorting Maintain two variables
    # i and j pointing to start and end of
    # array Such that smallest element of
    # array pairs with largest element
    i = 0
    j = N - 1
    while(i <= j):
        print("(", arr[i], ",",
                   arr[j], ")", end = " ")
        i += 1
        j -= 1
 
# Driver Code
if __name__ == '__main__':
    arr = [9, 6, 5, 1]
    N = len(arr)
 
    findOptimalPairs(arr, N)
     
# This code is contributed by
# Sahil_Shelangia


C#
// C# Program to divide the array into
// N pairs such that maximum pair is minimized
 
using System;
 
public class GFG{
    static void findOptimalPairs(int []arr, int N)
{
    Array.Sort(arr);
 
    // After Sorting Maintain two variables i and j
    // pointing to start and end of array Such that
    // smallest element of array pairs with largest
    // element
    for (int i = 0, j = N - 1; i <= j; i++, j--)
        Console.Write( "(" + arr[i] + ", " + arr[j] + ")" + " ");
}
 
    // Driver Code
    static public void Main (){
         
        int []arr = {9, 6, 5, 1};
        int N = arr.Length;
        findOptimalPairs(arr, N);
 
 
// This code is contributed by ajit.
 
    }
}


PHP


Javascript


输出:
(1, 9) (5, 6)