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 <bits/stdc++.h> ` ` ` `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; ` `} ` |

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

**Output:**

(1, 9) (5, 6)

## Recommended Posts:

- Probability of a random pair being the maximum weighted pair
- Pair with given product | Set 1 (Find if any pair exists)
- Maximum AND value of a pair in an array
- Pair with given sum and maximum shortest distance from end
- Find Sum of pair from two arrays with maximum sum
- Rectangle with Maximum Area using Java Pair
- Count ways of choosing a pair with maximum difference
- Find a pair with maximum product in array of Integers
- Probability of choosing a random pair with maximum sum in an array
- Choose k array elements such that difference of maximum and minimum is minimized
- XOR of Sum of every possible pair of an array
- Minimum XOR Value Pair
- Triplet pair (a, b, c) such that a+b, b+c and a+c are all divisible by K
- Subset with no pair sum divisible by K
- Smallest Pair Sum in an array

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.