Pair formation such that maximum pair sum is minimized - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// 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 Codeint main(){    int arr[] = { 9, 6, 5, 1 };    int N = sizeof(arr) / sizeof(arr[0]);     findOptimalPairs(arr, N);    return 0;}
// Java Program to divide the array into// N pairs such that maximum pair is minimizedimport 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.
# 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 Codeif __name__ == '__main__':    arr = [9, 6, 5, 1]    N = len(arr)     findOptimalPairs(arr, N)     # This code is contributed by# Sahil_Shelangia
// 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// PHP Program to divide the array into// N pairs such that maximum pair is minimized function findOptimalPairs($arr, $N){    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 ($i = 0, $j = $N - 1; $i <= $j; $i++, $j--)            echo "(", $arr[$i],                 ", ", $arr[$j], ")", " ";} // Driver Code$arr = array( 9, 6, 5, 1 );$N = sizeof($arr); findOptimalPairs($arr, $N); // This code is contributed by jit_t?>
<script> /// Javascript Program to divide the array into// N pairs such that maximum pair is minimizedfunction findOptimalPairs(arr, N){    arr.sort(function(a,b){ return a-b;});     // 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 (var i = 0, j = N - 1; i <= j; i++, j--)        document.write("(" + arr[i] + ", " + arr[j] + ")" + " ");} // Driver Codevar arr = [ 9, 6, 5, 1 ];var N = arr.length;findOptimalPairs(arr, N); </script>
(1, 9) (5, 6)
 
vt_m
jit_t
sahilshelangia
rrrtnx
Sorting Quiz
Arrays
Greedy
Sorting
Arrays
Greedy
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Chocolate Distribution Problem
Count pairs with given sum
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Dijkstra's shortest path algorithm | Greedy Algo-7
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Write a program to print all permutations of a given string
Huffman Coding | Greedy Algo-3