 Open in App
Not now

# Maximize sum of product and difference between any pair of array elements possible

• Difficulty Level : Expert
• Last Updated : 10 Jun, 2021

Given an array arr[] of size N, the task is to find the maximum value of arr[i] ∗ arr[j] + arr[i] − arr[j] for any pair (arr[i], arr[j]) from the given array, where i != j and 0 < i, j < N – 1.

Examples:

Input: arr[] = {1, 2, 3, 4, 5}
Output: 21
Explanation:
Among all the pairs of the array, the maximum value is obtained for the pair (arr, arr), which is equal to
=> arr * arr + arr – arr = 5 * 4 + 5 – 4 = 20 + 1 = 21.

Input: {-4, -5, 0, 1, 3}
Output: 21
Explanation:
Among all the pairs of the array, the maximum value is obtained for the pair (arr, arr), which is equal to
=> arr * arr + arr – arr = (-4) * (-5) + (-4) – (-5) = 20 + 1 = 21.

Naive Approach: The simplest approach to solve the problem is to traverse the array and generate all possible pairs (arr[i], arr[j]) (i != j) from the array and evaluate the expression for all the pairs. Finally, print the maximum of all the pairs.
Time Complexity: O(N2)
Auxiliary Space: O(1)

Efficient Approach: The optimal idea is based on the observation that the value of the expression can be maximum for the following 2 cases:

Follow the steps below to solve the problem:

• Sort the array arr[] in ascending order.
• Evaluate the expression for the pair arr[N – 1] and arr[N – 2] and store it in a variable, say max1.
• Similarly, evaluate the expression for the pair arr and arr and store it in a variable, say max2.
• Store the maximum of max1 and max2 in a variable, say ans.
• Print the value of ans as the result.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to evaluate given expression``int` `compute(``int` `a, ``int` `b)``{``    ``// Store the result``    ``int` `ans = a * b + a - b;``    ``return` `ans;``}` `// Function to find the maximum value of``// the given expression possible for any``// unique pair from the given array``void` `findMaxValue(``int` `arr[], ``int` `N)``{``    ``// Sort the array in ascending order``    ``sort(arr, arr + N);` `    ``// Evaluate the expression for``    ``// the two largest elements``    ``int` `maxm = compute(arr[N - 1], arr[N - 2]);` `    ``// Evaluate the expression for``    ``// the two smallest elements``    ``maxm = max(maxm, compute(arr, arr));` `    ``// Print the maximum``    ``cout << maxm;``}` `// Driver Code``int` `main()``{``    ``// Given array``    ``int` `arr[] = { -4, -5, 0, 1, 3 };` `    ``// Store the size of the array``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``findMaxValue(arr, N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.io.*;``import` `java.util.*;``class` `GFG``{` `  ``// Function to evaluate given expression``  ``static` `int` `compute(``int` `a, ``int` `b)``  ``{``    ``// Store the result``    ``int` `ans = a * b + a - b;``    ``return` `ans;``  ``}` `  ``// Function to find the maximum value of``  ``// the given expression possible for any``  ``// unique pair from the given array``  ``static` `void` `findMaxValue(``int` `arr[], ``int` `N)``  ``{``    ``// Sort the array in ascending order``    ``Arrays.sort(arr);` `    ``// Evaluate the expression for``    ``// the two largest elements``    ``int` `maxm = compute(arr[N - ``1``], arr[N - ``2``]);` `    ``// Evaluate the expression for``    ``// the two smallest elements``    ``maxm = Math.max(maxm, compute(arr[``1``], arr[``0``]));` `    ``// Print the maximum``    ``System.out.print(maxm);``  ``}`  `  ``// Driver Code``  ``public` `static` `void` `main(String[] args)``  ``{``    ``// Given array``    ``int` `arr[] = { -``4``, -``5``, ``0``, ``1``, ``3` `};` `    ``// Store the size of the array``    ``int` `N = arr.length;` `    ``findMaxValue(arr, N);``  ``}``}` `// This code is contributed by saanjoy_62`

## Python3

 `# Python Program for the above approach``# Function to evaluate given expression``def` `compute(a, b):``  ` `    ``# Store the result``    ``res ``=` `(a ``*` `b) ``+` `(a ``-` `b)``    ``return` `res``  ` `# Function to find the maximum value of``# the given expression possible for any``# unique pair from the given array``def` `findMaxValue(arr, N):``  ` `    ``# Sort the list in ascending order``    ``arr.sort()``    ` `    ``# Evaluate the expression for``    ``# the two largest elements``    ``maxm ``=` `compute(arr[N ``-` `1``], arr[N ``-` `2``])``    ` `    ``# Evaluate the expression for``    ``# the two smallest elements``    ``maxm ``=` `max``(maxm, compute(arr[``1``], arr[``0``]));``    ``print``(maxm)``    ` `# Driver code``# given list``arr ``=` `[``-``4``, ``-``5``, ``0``, ``1``, ``3``]` `# store the size of the list``N ``=` `len``(arr)``findMaxValue(arr, N)` `# This code is contributed by santhoshcharan.`

## C#

 `// C# program for above approach``using` `System;``public` `class` `GFG``{` `  ``// Function to evaluate given expression``  ``static` `int` `compute(``int` `a, ``int` `b)``  ``{``    ``// Store the result``    ``int` `ans = a * b + a - b;``    ``return` `ans;``  ``}`` ` `  ``// Function to find the maximum value of``  ``// the given expression possible for any``  ``// unique pair from the given array``  ``static` `void` `findMaxValue(``int``[] arr, ``int` `N)``  ``{``    ``// Sort the array in ascending order``    ``Array.Sort(arr);`` ` `    ``// Evaluate the expression for``    ``// the two largest elements``    ``int` `maxm = compute(arr[N - 1], arr[N - 2]);`` ` `    ``// Evaluate the expression for``    ``// the two smallest elements``    ``maxm = Math.Max(maxm, compute(arr, arr));`` ` `    ``// Print the maximum``    ``Console.WriteLine(maxm);``  ``}` `// Driver code``public` `static` `void` `Main(String[] args)``{` `    ``// Given array``    ``int``[] arr = { -4, -5, 0, 1, 3 };`` ` `    ``// Store the size of the array``    ``int` `N = arr.Length;`` ` `    ``findMaxValue(arr, N);``}``}` `// This code is contributed by susmitakundugoaldanga.`

## Javascript

 ``

Output

`21`

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

My Personal Notes arrow_drop_up