Open In App

Php Program for Maximum difference between groups of size two

Last Updated : 27 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given an array of even number of elements, form groups of 2 using these array elements such that the difference between the group with highest sum and the one with lowest sum is maximum.
Note: An element can be a part of one group only and it has to be a part of at least 1 group. 
Examples: 
 

Input : arr[] = {1, 4, 9, 6}
Output : 10
Groups formed will be (1, 4) and (6, 9), 
the difference between highest sum group
(6, 9) i.e 15 and lowest sum group (1, 4)
i.e 5 is 10.


Input : arr[] = {6, 7, 1, 11}
Output : 11
Groups formed will be (1, 6) and (7, 11), 
the difference between highest sum group
(7, 11) i.e 18 and lowest sum group (1, 6)
i.e 7 is 11.

 

Simple Approach: We can solve this problem by making all possible combinations and checking each set of combination differences between the group with the highest sum and with the lowest sum. A total of n*(n-1)/2 such groups would be formed (nC2). 
Time Complexity: O(n^3), because it will take O(n^2) to generate groups and to check against each group n iterations will be needed thus overall it takes O(n^3) time.
Efficient Approach: We can use the greedy approach. Sort the whole array and our result is sum of last two elements minus sum of first two elements.
 

PHP




<?php
// PHP program to find minimum
// difference between groups of
// highest and lowest sums.
function CalculateMax($arr, $n)
{
    // Sorting the whole array.
    sort($arr);
     
    $min_sum = $arr[0] +
               $arr[1];
    $max_sum = $arr[$n - 1] +
               $arr[$n - 2];
 
    return abs($max_sum -
               $min_sum);
}
 
// Driver code
$arr = array (6, 7, 1, 11 );
$n = sizeof($arr);
echo CalculateMax($arr, $n), "
" ;
 
// This code is contributed by ajit
?>


Output:  

11

Time Complexity: O (n * log n)

Space Complexity: O(1) as no extra space has been taken.

Further Optimization : 
Instead of sorting, we can find a maximum two and minimum of two in linear time and reduce the time complexity to O(n). 
 

Below is the code for the above approach.

PHP




<?php
    // Php program to
    // find minimum difference
    // between groups of highest and lowest
    // sums.
     
    function CalculateMax($arr, $n)
    {
    $first_min = min($arr);
    $second_min = PHP_INT_MAX;
    for($i = 0; $i < $n ; $i ++)
    {
        // If arr[i] is not equal to first min
        if ($arr[$i] != $first_min)
            $second_min = min($arr[$i],$second_min);
    }
     
    $first_max = max($arr);
    $second_max = PHP_INT_MIN;
    for($i = 0; $i < $n ; $i ++)
    {
        // If arr[i] is not equal to first max
        if ($arr[$i] != $first_max)
            $second_max = max($arr[$i],$second_max);
    }
     
    return abs($first_max+$second_max-$first_min-$second_min);
    }
     
    $arr = array(6, 7, 1, 11);
    $n = sizeof($arr);
    echo CalculateMax($arr, $n);
 
// This code is contributed by Aman Kumar
?>


Output

11

Time Complexity: O(N)
Auxiliary Space: O(1)

Please refer complete article on Maximum difference between groups of size two for more details!



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads