# 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[4], arr[3]), which is equal to
=> arr[4] * arr[3] + arr[4] – arr[3] = 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[0], arr[1]), which is equal to
=> arr[0] * arr[1] + arr[0] – arr[1] = (-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[1] and arr[0] 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[1], arr[0]));`   `    ``// 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[0]);`   `    ``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[1], arr[0]));` ` `  `    ``// 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
Related Articles