Find a pair with maximum product in array of Integers

Given an array with both +ive and -ive integers, return a pair with 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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.
?>

chevron_right


Output : 

Max product pair is {6, 7}

Time Complexity : O(n2)



Better Approach:

A Better Solution is to use sorting. Below are detailed steps. 
1) Sort input array in increasing order. 
2) If all elements are positive, then return the product of the last two numbers. 
3) Else return a maximum of products of the first two and last two numbers. 

Thanks to Rahul Jain for suggesting this method.

Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output

Max 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. 
a) Maximum positive value 
b) Second maximum positive value 
c) Maximum negative value i.e., a negative value with maximum absolute value 
d) 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
    }
  
    // Iniitialize maximum and second maximum
    int posa = INT_MIN, posb = INT_MIN;
  
    // Iniitialize 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
        }
       
        // Iniitialize maximum and second maximum
        int posa = Integer.MIN_VALUE,
            posb = Integer.MIN_VALUE;
       
        // Iniitialize 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.    

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
  
    # Iniitialize maximum and 
    # second maximum
    posa = 0
    posb = 0
  
    # Iniitialize 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
        }
      
        // Iniitialize maximum and
        // second maximum
        int posa = int.MinValue;
        int posb = int.MaxValue;
      
        // Iniitialize 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. 

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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;
    }
  
    // Iniitialize maximum and 
    // second maximum
    $posa = 0;
    $posb = 0;
  
    // Iniitialize 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 
?>

chevron_right


Output: 

Max product pair is {7, 6}

Time complexity: O(n) 
Auxiliary Space: O(1)
 

Thanks to Gaurav Ahirwar for suggesting this method.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up