Find a pair with maximum product in array of Integers
Last Updated :
18 Sep, 2023
Given an array with both +ive and -ive integers, return a pair with the highest product.
Examples :
Input: arr[] = {1, 4, 3, 6, 7, 0}
Output: {6,7}
Input: arr[] = {-1, -3, -4, 2, 0, -5}
Output: {-4,-5}
A Simple Solution is to consider every pair and keep track of the maximum product. Below is the implementation of this simple solution.
C++
// A simple C++ program to find max product pair in
// an array of integers
#include<bits/stdc++.h>
using namespace std;
// Function to find maximum product pair in arr[0..n-1]
void maxProduct(int arr[], int n)
{
if (n < 2)
{
cout << "No pairs exists\n";
return;
}
// Initialize max product pair
int a = arr[0], b = arr[1];
// Traverse through every possible pair
// and keep track of max product
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++)
if (arr[i]*arr[j] > a*b)
a = arr[i], b = arr[j];
cout << "Max product pair is {" << a << ", "
<< b << "}";
}
// Driver program to test
int main()
{
int arr[] = {1, 4, 3, 6, 7, 0};
int n = sizeof(arr)/sizeof(arr[0]);
maxProduct(arr, n);
return 0;
}
Java
// JAVA Code to Find a pair with maximum
// product in array of Integers
import java.util.*;
class GFG {
// Function to find maximum product pair
// in arr[0..n-1]
static void maxProduct(int arr[], int n)
{
if (n < 2)
{
System.out.println("No pairs exists");
return;
}
// Initialize max product pair
int a = arr[0], b = arr[1];
// Traverse through every possible pair
// and keep track of max product
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (arr[i] * arr[j] > a * b){
a = arr[i];
b = arr[j];
}
System.out.println("Max product pair is {" +
a + ", " + b + "}");
}
/* Driver program to test above function */
public static void main(String[] args)
{
int arr[] = {1, 4, 3, 6, 7, 0};
int n = arr.length;
maxProduct(arr, n);
}
}
// This code is contributed by Arnav Kr. Mandal.
Python3
# A simple Python3 program to find max
# product pair in an array of integers
# Function to find maximum
# product pair in arr[0..n-1]
def maxProduct(arr, n):
if (n < 2):
print("No pairs exists")
return
# Initialize max product pair
a = arr[0]; b = arr[1]
# Traverse through every possible pair
# and keep track of max product
for i in range(0, n):
for j in range(i + 1, n):
if (arr[i] * arr[j] > a * b):
a = arr[i]; b = arr[j]
print("Max product pair is {", a, ",", b, "}",
sep = "")
# Driver Code
arr = [1, 4, 3, 6, 7, 0]
n = len(arr)
maxProduct(arr, n)
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# Code to Find a pair with maximum
// product in array of Integers
using System;
class GFG
{
// Function to find maximum
// product pair in arr[0..n-1]
static void maxProduct(int []arr, int n)
{
if (n < 2)
{
Console.Write("No pairs exists");
return;
}
// Initialize max product pair
int a = arr[0], b = arr[1];
// Traverse through every possible pair
// and keep track of max product
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (arr[i] * arr[j] > a * b)
{
a = arr[i];
b = arr[j];
}
Console.Write("Max product pair is {" +
a + ", " + b + "}");
}
// Driver Code
public static void Main()
{
int []arr = {1, 4, 3, 6, 7, 0};
int n = arr.Length;
maxProduct(arr, n);
}
}
// This code is contributed by nitin mittal.
PHP
<?php
// A simple PHP program to
// find max product pair in
// an array of integers
// Function to find maximum
// product pair in arr[0..n-1]
function maxProduct( $arr, $n)
{
if ($n < 2)
{
echo "No pairs exists\n";
return;
}
// Initialize max product pair
$a = $arr[0];
$b = $arr[1];
// Traverse through every possible pair
// and keep track of max product
for ($i = 0; $i < $n; $i++)
for ($j = $i + 1; $j < $n; $j++)
{
if ($arr[$i] * $arr[$j] > $a * $b)
{
$a = $arr[$i];
$b = $arr[$j];
}
}
echo "Max product pair is {" , $a , ", ";
echo $b , "}";
}
// Driver Code
$arr = array(1, 4, 3, 6, 7, 0);
$n = count($arr);
maxProduct($arr, $n);
// This code is contributed by anuj_67.
?>
JavaScript
<script>
// A simple Javascript program to find max product pair in
// an array of integers
// Function to find maximum product pair in arr[0..n-1]
function maxProduct(arr, n)
{
if (n < 2)
{
document.write("No pairs exists" + "<br>");
return;
}
// Initialize max product pair
let a = arr[0], b = arr[1];
// Traverse through every possible pair
// and keep track of max product
for (let i=0; i<n; i++)
for (let j=i+1; j<n; j++)
if (arr[i]*arr[j] > a*b)
a = arr[i], b = arr[j];
document.write("Max product pair is {" + a + ", "
+ b + "}");
}
// Driver program to test
let arr = [1, 4, 3, 6, 7, 0];
let n = arr.length;
maxProduct(arr, n);
// This code is contributed by Mayank Tyagi
</script>
OutputMax product pair is {6, 7}
Time Complexity: O(n2)
Auxiliary Space: O(1)
Better Approach:
A Better Solution is to use sorting. Below are detailed steps.
- Sort input array in increasing order.
- If all elements are positive, then return the product of the last two numbers.
- Else return a maximum of products of the first two and last two numbers.
Thanks to Rahul Jain for suggesting this method.
C++14
// C++ code to find a pair with maximum
// product in array of Integers
#include<bits/stdc++.h>
using namespace std;
void maxProduct(vector<int>arr, int n)
{
// Sort the array
sort(arr.begin(), arr.end());
int num1, num2;
// Calculate product of two smallest numbers
int sum1 = arr[0] * arr[1];
// Calculate product of two largest numbers
int sum2 = arr[n - 1] * arr[n - 2];
// Print the pairs whose product is greater
if (sum1 > sum2)
{
num1 = arr[0];
num2 = arr[1];
}
else
{
num1 = arr[n - 2];
num2 = arr[n - 1];
}
cout << ("Max product pair = ")
<< num1 << "," << num2;
}
// Driver Code
int main()
{
vector<int>arr = { 1, 4, 3, 6, 7, 0 };
int n = arr.size();
maxProduct(arr, n);
}
// This code is contributed by Stream_Cipher
Java
// JAVA Code to Find a pair with maximum
// product in array of Integers
import java.util.*;
public class GFG {
static void maxProduct(int arr[], int n)
{
// Sort the array
Arrays.sort(arr);
int num1, num2;
// Calculate product of two smallest numbers
int sum1 = arr[0] * arr[1];
// Calculate product of two largest numbers
int sum2 = arr[n - 1] * arr[n - 2];
// print the pairs whose product is greater
if (sum1 > sum2) {
num1 = arr[0];
num2 = arr[1];
}
else {
num1 = arr[n - 2];
num2 = arr[n - 1];
}
System.out.println("Max product pair = " +
"{" + num1 + "," + num2 + "}");
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 1, 4, 3, 6, 7, 0 };
int n = arr.length;
maxProduct(arr, n);
}
}
// Contributed by Navtika Kumar
Python3
# Python code to find a pair with maximum
# product in array of Integers
def maxProduct(arr, n):
# Sort the array
arr.sort()
num1 = num2 = 0
# Calculate product of two smallest numbers
sum1 = arr[0] * arr[1]
# Calculate product of two largest numbers
sum2 = arr[n - 1] * arr[n - 2]
# Print the pairs whose product is greater
if (sum1 > sum2):
num1 = arr[0]
num2 = arr[1]
else:
num1 = arr[n - 2]
num2 = arr[n - 1]
print("Max product pair = {", num1, ",", num2, "}", sep="")
# Driver Code
arr = [1, 4, 3, 6, 7, 0]
n = len(arr)
maxProduct(arr, n)
# This code is contributed by subhammahato348.
C#
// C# code to Find a pair with maximum
// product in array of Integers
using System;
class GFG{
static void maxProduct(int []arr, int n)
{
// Sort the array
Array.Sort(arr);
int num1, num2;
// Calculate product of two
// smallest numbers
int sum1 = arr[0] * arr[1];
// Calculate product of two
// largest numbers
int sum2 = arr[n - 1] * arr[n - 2];
// Print the pairs whose
// product is greater
if (sum1 > sum2)
{
num1 = arr[0];
num2 = arr[1];
}
else
{
num1 = arr[n - 2];
num2 = arr[n - 1];
}
Console.Write("Max product pair = " +
"{" + num1 + "," + num2 + "}");
}
// Driver Code
public static void Main(String[] args)
{
int []arr = { 1, 4, 3, 6, 7, 0 };
int n = arr.Length;
maxProduct(arr, n);
}
}
// This code is contributed by shivanisinghss2110
JavaScript
<script>
// Javascript code to Find a pair with maximum
// product in array of Integers
function maxProduct(arr, n)
{
// Sort the array
arr.sort(function(a, b){return a - b});
let num1, num2;
// Calculate product of two smallest numbers
let sum1 = arr[0] * arr[1];
// Calculate product of two largest numbers
let sum2 = arr[n - 1] * arr[n - 2];
// print the pairs whose product is greater
if (sum1 > sum2)
{
num1 = arr[0];
num2 = arr[1];
}
else
{
num1 = arr[n - 2];
num2 = arr[n - 1];
}
document.write("Max product pair = " +
"{" + num1 + "," + num2 + "}");
}
// Driver Code
let arr = [ 1, 4, 3, 6, 7, 0 ];
let n = arr.length;
maxProduct(arr, n);
// This code is contributed by avanitrachhadiya2155
</script>
OutputMax product pair = 6,7
Time Complexity: O(nlog n)
Auxiliary Space: O(1)
Efficient Approach:
An Efficient Solution can solve the above problem in a single traversal of the input array. The idea is to traverse the input array and keep track of the following four values.
- Maximum positive value
- Second maximum positive value
- Maximum negative value i.e., a negative value with maximum absolute value
- Second maximum negative value.
At the end of the loop, compare the products of the first two and last two and print the maximum of two products. Below is the implementation of this idea.
C++
// A O(n) C++ program to find maximum product pair in an array
#include<bits/stdc++.h>
using namespace std;
// Function to find maximum product pair in arr[0..n-1]
void maxProduct(int arr[], int n)
{
if (n < 2)
{
cout << "No pairs exists\n";
return;
}
if (n == 2)
{
cout << arr[0] << " " << arr[1] << endl;
return;
}
// Initialize maximum and second maximum
int posa = INT_MIN, posb = INT_MIN;
// Initialize minimum and second minimum
int nega = INT_MIN, negb = INT_MIN;
// Traverse given array
for (int i = 0; i < n; i++)
{
// Update maximum and second maximum if needed
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
// Update minimum and second minimum if needed
if (arr[i] < 0 && abs(arr[i]) > abs(nega))
{
negb = nega;
nega = arr[i];
}
else if(arr[i] < 0 && abs(arr[i]) > abs(negb))
negb = arr[i];
}
if (nega*negb > posa*posb)
cout << "Max product pair is {" << nega << ", "
<< negb << "}";
else
cout << "Max product pair is {" << posa << ", "
<< posb << "}";
}
// Driver program to test above function
int main()
{
int arr[] = {1, 4, 3, 6, 7, 0};
int n = sizeof(arr)/sizeof(arr[0]);
maxProduct(arr, n);
return 0;
}
Java
// JAVA Code to Find a pair with maximum
// product in array of Integers
import java.util.*;
class GFG {
// Function to find maximum product pair
// in arr[0..n-1]
static void maxProduct(int arr[], int n)
{
if (n < 2)
{
System.out.println("No pairs exists");
return;
}
if (n == 2)
{
System.out.println(arr[0] + " " + arr[1]);
return;
}
// Initialize maximum and second maximum
int posa = Integer.MIN_VALUE,
posb = Integer.MIN_VALUE;
// Initialize minimum and second minimum
int nega = Integer.MIN_VALUE,
negb = Integer.MIN_VALUE;
// Traverse given array
for (int i = 0; i < n; i++)
{
// Update maximum and second maximum
// if needed
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
// Update minimum and second minimum
// if needed
if (arr[i] < 0 && Math.abs(arr[i]) >
Math.abs(nega))
{
negb = nega;
nega = arr[i];
}
else if(arr[i] < 0 && Math.abs(arr[i])
> Math.abs(negb))
negb = arr[i];
}
if (nega * negb > posa * posb)
System.out.println("Max product pair is {"
+ nega + ", " + negb + "}");
else
System.out.println("Max product pair is {"
+ posa + ", " + posb + "}");
}
/* Driver program to test above function */
public static void main(String[] args)
{
int arr[] = {1, 4, 3, 6, 7, 0};
int n = arr.length;
maxProduct(arr, n);
}
}
// This code is contributed by Arnav Kr. Mandal.
Python3
# A O(n) Python 3 program to find
# maximum product pair in an array
# Function to find maximum product
# pair in arr[0..n-1]
def maxProduct(arr, n):
if (n < 2):
print("No pairs exists")
return
if (n == 2):
print(arr[0] ," " , arr[1])
return
# Initialize maximum and
# second maximum
posa = 0
posb = 0
# Initialize minimum and
# second minimum
nega = 0
negb = 0
# Traverse given array
for i in range(n):
# Update maximum and second
# maximum if needed
if (arr[i] > posa):
posb = posa
posa = arr[i]
elif (arr[i] > posb):
posb = arr[i]
# Update minimum and second
# minimum if needed
if (arr[i] < 0 and abs(arr[i]) > abs(nega)):
negb = nega
nega = arr[i]
elif(arr[i] < 0 and abs(arr[i]) > abs(negb)):
negb = arr[i]
if (nega * negb > posa * posb):
print("Max product pair is {" ,
nega ,", ", negb , "}")
else:
print( "Max product pair is {" ,
posa ,", " ,posb , "}")
# Driver Code
if __name__ =="__main__":
arr = [1, 4, 3, 6, 7, 0]
n = len(arr)
maxProduct(arr, n)
# This code is contributed
# by ChitraNayal
C#
// C# Code to Find a pair with maximum
// product in array of Integers
using System;
class GFG {
// Function to find maximum
// product pair in arr[0..n-1]
static void maxProduct(int []arr, int n)
{
if (n < 2)
{
Console.WriteLine("No pairs exists");
return;
}
if (n == 2)
{
Console.WriteLine(arr[0] + " " + arr[1]);
return;
}
// Initialize maximum and
// second maximum
int posa = int.MinValue;
int posb = int.MaxValue;
// Initialize minimum and
// second minimum
int nega = int.MinValue;
int negb = int.MaxValue;
// Traverse given array
for (int i = 0; i < n; i++)
{
// Update maximum and
// second maximum
// if needed
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
// Update minimum and
// second minimum if
// needed
if (arr[i] < 0 && Math.Abs(arr[i]) >
Math.Abs(nega))
{
negb = nega;
nega = arr[i];
}
else if(arr[i] < 0 &&
Math.Abs(arr[i]) >
Math.Abs(negb))
negb = arr[i];
}
if (nega * negb > posa * posb)
Console.WriteLine("Max product pair is {"
+ nega + ", " + negb + "}");
else
Console.WriteLine("Max product pair is {"
+ posa + ", " + posb + "}");
}
// Driver Code
public static void Main()
{
int []arr = {1, 4, 3, 6, 7, 0};
int n = arr.Length;
maxProduct(arr, n);
}
}
// This code is contributed by anuj_67.
PHP
<?php
// A O(n) PHP program to find maximum
// product pair in an array
// Function to find maximum product
// pair in arr[0..n-1]
function maxProduct(&$arr, $n)
{
if ($n < 2)
{
echo("No pairs exists\n");
return;
}
if ($n == 2)
{
echo ($arr[0]);
echo (" ");
echo($arr[1]);
echo("\n");
return;
}
// Initialize maximum and
// second maximum
$posa = 0;
$posb = 0;
// Initialize minimum and
// second minimum
$nega = 0;
$negb = 0;
// Traverse given array
for ($i = 0; $i < $n; $i++)
{
// Update maximum and second
// maximum if needed
if ($arr[$i] > $posa)
{
$posb = $posa;
$posa = $arr[$i];
}
else if ($arr[$i] > $posb)
$posb = $arr[$i];
// Update minimum and second
// minimum if needed
if ($arr[$i] < 0 &&
abs($arr[$i]) > abs($nega))
{
$negb = $nega;
$nega = $arr[$i];
}
else if($arr[$i] < 0 &&
abs($arr[$i]) > abs($negb))
$negb = $arr[$i];
}
if ($nega * $negb > $posa * $posb)
{
echo("Max product pair is {");
echo $nega;
echo(", ");
echo ($negb);
echo ("}");
}
else
{
echo("Max product pair is {");
echo $posa;
echo(", ");
echo ($posb);
echo ("}");
}
}
// Driver Code
$arr = array(1, 4, 3, 6, 7, 0);
$n = sizeof($arr);
maxProduct($arr, $n);
// This code is contributed
// by Shivi_Aggarwal
?>
JavaScript
<script>
// JAVAscript Code to Find a pair with maximum
// product in array of Integers
// Function to find maximum product pair
// in arr[0..n-1]
function maxProduct(arr,n)
{
if (n < 2)
{
document.write("No pairs exists");
return;
}
if (n == 2)
{
document.write(arr[0] + " " + arr[1]);
return;
}
// Initialize maximum and second maximum
let posa = Number.MIN_VALUE,
posb = Number.MIN_VALUE;
// Initialize minimum and second minimum
let nega = Number.MIN_VALUE,
negb = Number.MIN_VALUE;
// Traverse given array
for (let i = 0; i < n; i++)
{
// Update maximum and second maximum
// if needed
if (arr[i] > posa)
{
posb = posa;
posa = arr[i];
}
else if (arr[i] > posb)
posb = arr[i];
// Update minimum and second minimum
// if needed
if (arr[i] < 0 && Math.abs(arr[i]) >
Math.abs(nega))
{
negb = nega;
nega = arr[i];
}
else if(arr[i] < 0 && Math.abs(arr[i])
> Math.abs(negb))
negb = arr[i];
}
if (nega * negb > posa * posb)
document.write("Max product pair is {"
+ nega + ", " + negb + "}");
else
document.write("Max product pair is {"
+ posa + ", " + posb + "}");
}
/* Driver program to test above function */
let arr=[1, 4, 3, 6, 7, 0];
let n = arr.length;
maxProduct(arr, n);
// This code is contributed by rag2127
</script>
OutputMax product pair is {7, 6}
Time complexity: O(n)
Auxiliary Space: O(1)
Similar Reads
Find a pair (n,r) in an integer array such that value of nPr is maximum
Given an array of non-negative integers arr[], the task is to find a pair (n, r) such that nPr is the maximum possible and r ⤠n. nPr = n! / (n - r)! Examples: Input: arr[] = {5, 2, 3, 4, 1} Output: n = 5 and r = 4 5P4 = 5! / (5 - 4)! = 120, which is the maximum possible. Input: arr[] = {0, 2, 3, 4,
9 min read
Maximum possible GCD for a pair of integers with product N
Given an integer N, the task is to find the maximum possible GCD among all pair of integers with product N.Examples: Input: N=12 Output: 2 Explanation: All possible pairs with product 12 are {1, 12}, {2, 6}, {3, 4} GCD(1, 12) = 1 GCD(2, 6) = 2 GCD(3, 4) = 1 Therefore, the maximum possible GCD = maxi
9 min read
Find a pair (n,r) in an integer array such that value of nCr is maximum
Given an array of non-negative integers arr[]. The task is to find a pair (n, r) such that value of nCr is maximum possible r < n. nCr = n! / (r! * (n - r)!) Examples: Input: arr[] = {5, 2, 3, 4, 1} Output: n = 5 and r = 2 5C3 = 5! / (3! * (5 - 3)!) = 10Input: arr[] = {0, 2, 3, 4, 1, 6, 8, 9} Out
7 min read
Find pair with maximum ratio in an Array
Given an array arr[], the task is to find the maximum ratio pair in the array.Examples: Input: arr[] = { 15, 10, 3 } Output: 5 Explanation: Maximum ratio pair will be - \frac{15}{3} = 5 Input: arr[] = { 15, 10, 3, 2 } Output: 7.5 Explanation: Maximum ratio pair will be - \frac{15}{2} = 7.5 Approach:
8 min read
Find pair with maximum GCD in an array
We are given an array of positive integers. Find the pair in array with maximum GCD.Examples: Input : arr[] : { 1 2 3 4 5 }Output : 2Explanation : Pair {2, 4} has GCD 2 which is highest. Other pairs have a GCD of 1.Input : arr[] : { 2 3 4 8 8 11 12 }Output : 8Explanation : Pair {8, 8} has GCD 8 whic
15+ min read
Minimum product pair an array of positive Integers
Given an array of positive integers. We are required to write a program to print the minimum product of any two numbers of the given array. Examples: Input: 11 8 5 7 5 100Output: 25 Explanation: The minimum product of any two numbers will be 5 * 5 = 25. Input: 198 76 544 123 154 675 Output: 7448Expl
12 min read
Find pair with greatest product in array
Given an array of n elements, the task is to find the greatest number such that it is the product of two elements of the given array. If no such element exists, print -1. Elements are within the range of 1 to 10^5. Examples : Input : arr[] = {10, 3, 5, 30, 35} Output: 30 Explanation: 30 is the produ
9 min read
Find Maximum dot product of two arrays with insertion of 0's
Given two arrays of positive integers of size m and n where m > n. We need to maximize the dot product by inserting zeros in the second array but we cannot disturb the order of elements. Examples: Input : A[] = {2, 3 , 1, 7, 8} , B[] = {3, 6, 7} Output : 107Explanation : We get maximum dot produc
12 min read
Maximum possible GCD for a pair of integers with sum N
Given an integer N, the task is to find the maximum possible GCD of a pair of integers such that their sum is N. Examples : Input: N = 30 Output: 15 Explanation: GCD of (15, 15) is 15, which is the maximum possible GCD Input: N = 33 Output: 11 Explanation: GCD of (11, 22) is 11, which is the maximum
4 min read
Find Sum of pair from two arrays with maximum sum
Given two arrays of positive and distinct integers. The task is to find a pair from the two arrays with maximum sum. Note: The pair should contain one element from both the arrays. Examples: Input : arr1[] = {1, 2, 3}, arr2[] = {4, 5, 6} Output : Max Sum = 9 Pair (3, 6) has the maximum sum. Input :
6 min read