Open In App

Maximize the difference between two subsets of a set with negatives

Given an of integers of size N. The task is to separate these integers into two groups g1 and g2 such that (sum of elements of g1) – (sum of elements of g2) becomes maximum. Your task is to print the value of result. We may keep one subset as empty.

Examples: 

Input : 3, 7, -4, 10, -11, 2 
Output : 37 
Explanation: 
g1: 3, 7, 10, 2 
g2: -4, -11 
result = ( 3 + 7 + 10 + 2 ) – ( -4 + -11) = 22 – (-15) = 37

Input : 2, 2, -2, -2 
Output :

The idea is to group integers according to their sign value i.e., we group positive integers as g1 and negative integers as g2. 
Since, – ( -g2 ) = +g2 
Therefore, result becomes g1 + |g2|. 




// CPP program to make two subsets with
// maximum difference.
#include <bits/stdc++.h>
using namespace std;
 
int maxDiff(int arr[], int n)
{
    int sum = 0;
 
    // We move all negative elements into
    // one set. So we add negation of negative
    // numbers to maximize difference
    for (int i = 0; i < n; i++)
         sum = sum + abs(arr[i]);
    
    return sum;
}
 
// Driver Code
int main()
{
    int arr[] = { 3, 7, -4, 10, -11, 2 };
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << maxDiff(arr, n);
    return 0;
}




// Java program to make two subsets with
// maximum difference.
import java.util.*;
 
class solution
{
 
static int maxDiff(int arr[], int n)
{
    int sum = 0;
 
    // We move all negative elements into
    // one set. So we add negation of negative
    // numbers to maximize difference
    for (int i = 0; i < n; i++)
        sum = sum + Math.abs(arr[i]);
     
    return sum;
}
 
// Driver Code
public static void main(String args[])
{
    int []arr = { 3, 7, -4, 10, -11, 2 };
    int n = arr.length;
    System.out.println(maxDiff(arr, n));
}
}




# Python3 program to make two subsets
# with maximum difference.
 
def maxDiff(arr, n) :
 
    sum = 0
 
    # We move all negative elements into
    # one set. So we add negation of negative
    # numbers to maximize difference
    for i in range(n) :
        sum += abs(arr[i])
     
    return sum
 
# Driver Code
if __name__ == "__main__" :
 
    arr = [ 3, 7, -4, 10, -11, 2 ]
    n = len(arr)
    print(maxDiff(arr, n))
 
# This code is contributed by Ryuga




using System;
 
// C# program to make two subsets with
// maximum difference.
 
public class solution
{
 
public static int maxDiff(int[] arr, int n)
{
    int sum = 0;
 
    // We move all negative elements into
    // one set. So we add negation of negative
    // numbers to maximize difference 
    for (int i = 0; i < n; i++)
    {
        sum = sum + Math.Abs(arr[i]);
    }
 
    return sum;
}
 
// Driver Code
public static void Main(string[] args)
{
    int[] arr = new int[] {3, 7, -4, 10, -11, 2};
    int n = arr.Length;
    Console.WriteLine(maxDiff(arr, n));
}
}
 
  // This code is contributed by Shrikant13




<?php
// PHP program to make two subsets
// with maximum difference.
function maxDiff($arr, $n)
{
    $sum = 0;
 
    // We move all negative elements
    // into one set. So we add negation
    // of negative numbers to maximize
    // difference
    for ($i = 0; $i < $n; $i++)
        $sum = $sum + abs($arr[$i]);
     
    return $sum;
}
 
// Driver Code
$arr = array( 3, 7, -4, 10, -11, 2 );
$n = sizeof($arr);
echo maxDiff($arr, $n);
     
// This code is contributed by Sachin.
?>




<script>
// javascript program to make two subsets with
// maximum difference.
function maxDiff(arr , n)
{
    var sum = 0;
 
    // We move all negative elements into
    // one set. So we add negation of negative
    // numbers to maximize difference
    for (i = 0; i < n; i++)
        sum = sum + Math.abs(arr[i]);
     
    return sum;
}
 
// Driver Code
var arr = [ 3, 7, -4, 10, -11, 2 ];
var n = arr.length;
document.write(maxDiff(arr, n));
 
// This code is contributed by Princi Singh
</script>

Output
37

Time Complexity: O(n)


Article Tags :