Minimum and Maximum sum of absolute differences of pairs
Last Updated :
20 Jul, 2022
Given an array of N integers where N is even, find the minimum and maximum sum of absolute difference of N/2 pairs formed by pairing every element with one other element.
Examples:
Input: a[] = {10, -10, 20, -40}
Output: min_sum = 40, max_sum = 80
Explanation: Pairs selected for minimum sum
(-10, -40) and (10, 20)
min_sum = |-10 - -40| + |20 - 10| = 40
Pairs selected for maximum sum
(-10, 20) and (-40, 10)
max_sum = |-10 - 20| + |10 - -40| = 80
Input: a[] = {20, -10, -1, 30}
Output: min_sum = 19, max_sum = 61
Explanation: Pairs selected for minimum sum
(-1, -10) and (20, 30)
min_sum = |-1 - -10| + |20 - 30| = 19
Pairs selected for maximum sum
(-1, 30) and (-10, 20)
max_sum = |-1 - 30| + |-10 - 20| = 61
Approach: The most common observation will be that for minimum sum of differences we need the closest elements together as a pair and for the maximum sum we need the farthest elements together as a pair. So, we can simply sort the given list of elements and the closest pairs will be a[i], a[i+1], their absolute difference sum will yield us the minimum sum. The farthest will be (a[0], a[n-1]) and (a[1], a[n-2]) and so on, and their absolute difference sum will yield us the maximum-sum.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int calculate_min_sum( int a[], int n)
{
sort(a, a + n);
int min_sum = 0;
for ( int i = 1; i < n; i += 2) {
min_sum += abs (a[i] - a[i - 1]);
}
return min_sum;
}
int calculate_max_sum( int a[], int n)
{
sort(a, a + n);
int max_sum = 0;
for ( int i = 0; i < n / 2; i++) {
max_sum += abs (a[n - 1 - i] - a[i]);
}
return max_sum;
}
int main()
{
int a[] = { 10, -10, 20, -40};
int n = sizeof (a) / sizeof (a[0]);
cout << "The minimum sum of pairs is "
<< calculate_min_sum(a, n) << endl;
cout << "The maximum sum of pairs is "
<< calculate_max_sum(a, n) << endl;
return 0;
}
|
Java
import java.util.Arrays;
class GFG
{
static int calculate_min_sum( int [] a, int n)
{
Arrays.sort(a);
int min_sum = 0 ;
for ( int i = 1 ; i < n; i += 2 ) {
min_sum += Math.abs(a[i] - a[i - 1 ]);
}
return min_sum;
}
static int calculate_max_sum( int [] a, int n)
{
Arrays.sort(a);
int max_sum = 0 ;
for ( int i = 0 ; i < n / 2 ; i++) {
max_sum += Math.abs(a[n - 1 - i] - a[i]);
}
return max_sum;
}
public static void main (String[] args) {
int [] a = { 10 , - 10 , 20 , - 40 };
int n = a.length;
System.out.println( "The minimum sum of pairs is " +
calculate_min_sum(a, n));
System.out.println( "The maximum sum of pairs is " +
calculate_max_sum(a, n));
}
}
|
Python3
def calculate_min_sum( a, n):
a.sort()
min_sum = 0
for i in range ( 1 , n, 2 ):
min_sum + = abs (a[i] - a[i - 1 ])
return min_sum
def calculate_max_sum(a, n):
a.sort()
max_sum = 0
for i in range (n / / 2 ):
max_sum + = abs (a[n - 1 - i] - a[i])
return max_sum
if __name__ = = "__main__" :
a = [ 10 , - 10 , 20 , - 40 ]
n = len (a)
print ( "The minimum sum of pairs is" ,
calculate_min_sum(a, n))
print ( "The maximum sum of pairs is" ,
calculate_max_sum(a, n))
|
C#
using System;
class GFG
{
static int calculate_min_sum( int []a, int n)
{
Array.Sort(a);
int min_sum = 0;
for ( int i = 1; i < n; i += 2) {
min_sum += Math.Abs(a[i] - a[i - 1]);
}
return min_sum;
}
static int calculate_max_sum( int []a, int n)
{
Array.Sort(a);
int max_sum = 0;
for ( int i = 0; i < n / 2; i++) {
max_sum += Math.Abs(a[n - 1 - i] - a[i]);
}
return max_sum;
}
public static void Main ()
{
int []a = { 10, -10, 20, -40};
int n = a.Length;
Console.WriteLine( "The minimum sum of pairs is " +
calculate_min_sum(a, n));
Console.Write( "The maximum sum of pairs is " +
calculate_max_sum(a, n));
}
}
|
PHP
<?php
function calculate_min_sum( $a , $n )
{
sort( $a );
$min_sum = 0;
for ( $i = 1; $i < $n ; $i += 2)
{
$min_sum += abs ( $a [ $i ] -
$a [ $i - 1]);
}
return $min_sum ;
}
function calculate_max_sum( $a , $n )
{
sort( $a );
$max_sum = 0;
for ( $i = 0; $i < $n / 2; $i ++)
{
$max_sum += abs ( $a [ $n - 1 - $i ] -
$a [ $i ]);
}
return $max_sum ;
}
$a = array (10, -10, 20, -40);
$n = sizeof( $a );
echo ( "The minimum sum of pairs is "
. calculate_min_sum( $a , $n ) . "\n" );
echo ( "The maximum sum of pairs is "
. calculate_max_sum( $a , $n ));
?>
|
Javascript
<script>
function calculate_min_sum(a, n)
{
a.sort();
let min_sum = 0;
for (let i = 1; i < n; i += 2)
{
min_sum += Math.abs(a[i] - a[i - 1]);
}
return min_sum;
}
function calculate_max_sum(a, n)
{
a.sort();
let max_sum = 0;
for (let i = 0; i < parseInt(n / 2, 10); i++)
{
max_sum += Math.abs(a[n - 1 - i] - a[i]);
}
return max_sum;
}
let a = [ 10, -10, 20, -40 ];
let n = a.length;
document.write( "The minimum sum of pairs is " +
calculate_min_sum(a, n) + "</br>" );
document.write( "The maximum sum of pairs is " +
calculate_max_sum(a, n));
</script>
|
Output
The minimum sum of pairs is 40
The maximum sum of pairs is 80
Time complexity : O(n log n)
Share your thoughts in the comments
Please Login to comment...