Related Articles
Pair formation such that maximum pair sum is minimized
• Difficulty Level : Basic
• Last Updated : 05 Apr, 2021

Given an array of size 2 * N integers. Divide the array into N pairs, such that the maximum pair sum is minimized. In other words, the optimal division of array into N pairs should result into a maximum pair sum which is minimum of other maximum pair sum of all possibilities.
Examples:

Input : N = 2
arr[] = { 5, 8, 3, 9 }
Output : (3, 9) (5, 8)
Explanation:
Possible pairs are :
1. (8, 9) (3, 5) Maximum Sum of a Pair = 17
2. (5, 9) (3, 8) Maximum Sum of a Pair = 14
3. (3, 9) (5, 8) Maximum Sum of a Pair = 13
Thus, in case 3, the maximum pair sum is minimum of all the other cases. Hence, the answer is(3, 9) (5, 8).
Input : N = 2
arr[] = { 9, 6, 5, 1 }
Output : (1, 9) (5, 6)

Approach: The idea is to first sort the given array and then iterate over the loop to form pairs (i, j) where i would start from 0 and j would start from end of array correspondingly. Increment i and Decrement j to form the next pair and so on.
Below is the implementation of above approach.

## 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

 ``
Output:
`(1, 9) (5, 6)`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up