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 100
Output: 25
Explanation: The minimum product of any two numbers will be 5 * 5 = 25.Input: 198 76 544 123 154 675
Output: 7448
Explanation: The minimum product of any two numbers will be 76 * 123 = 7448.
A basic approach using two nested loops:
A simple approach will be to run two nested loops to generate all possible pairs of elements and keep track of the minimum product.
Algorithm:
- Initialize a variable ‘minProduct’ as maximum possible value.
- Traverse the given array using two nested loops:
a. For each pair of elements, calculate their product and update ‘minProduct’ if it is lesser than the current value. - Return the final value of ‘minProduct’.
Below is the implementation of the approach:
C++
// C++ code for the approach #include<bits/stdc++.h> using namespace std; // Function to print the minimum product of any two numbers in the array int minProduct( int arr[], int n) { // Initializing minimum product int minProd = INT_MAX; // Loop to generate all possible pairs of elements for ( int i=0; i<n-1; i++) { for ( int j=i+1; j<n; j++) { // Updating minimum product minProd = min(minProd, arr[i]*arr[j]); } } // Return the minimum product return minProd; } // Driver code int main() { int arr[] = { 11, 8 , 5 , 7 , 5 , 100 }; int n = sizeof (arr)/ sizeof (arr[0]); // Function call int minProd = minProduct(arr, n); cout << minProd << endl; return 0; } |
25
Time Complexity: O( n * n)
Auxiliary Space: O( 1 )
An optimized approach using sorting:
An optimized approach will be to first sort the given array and print the product of the first two numbers, sorting will take O(n log n) and the answer will be a[0] * a[1]
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to calculate minimum product // of pair int printMinimumProduct( int arr[], int n) { //Sort the array sort(arr,arr+n); // Returning the product of first two numbers return arr[0] * arr[1]; } // Driver program to test above function int main() { int a[] = { 11, 8 , 5 , 7 , 5 , 100 }; int n = sizeof (a) / sizeof (a[0]); cout << printMinimumProduct(a,n); return 0; } // This code is contributed by Pushpesh Raj |
Java
// java program for the above approach import java.util.*; class GFG { // Function to calculate minimum product // of pair static int printMinimumProduct( int arr[], int n) { // Sort the array Arrays.sort(arr); // Returning the product of first two numbers return arr[ 0 ]*arr[ 1 ]; } // Driver program to test above function public static void main (String[] args) { int a[]={ 11 , 8 , 5 , 7 , 5 , 100 }; int n=a.length; System.out.println(printMinimumProduct(a,n)); } } // This code is contributed by nmkiniqw7b. |
Python3
# Python program for the above approach # Function to calculate minimum product # of pair def printMinimumProduct( list ,n): # Sort the list list .sort() # Returning the product of first two numbers return list [ 0 ] * list [ 1 ] # Driver code a = [ 11 , 8 , 5 , 7 , 5 , 100 ] n = len (a) print (printMinimumProduct(a,n)) # This code is contributed by nmkiniqw7b. |
Javascript
// Javascript program for the above approach // Function to calculate minimum product // of pair function printMinimumProduct(arr, n) { // Sort the array arr.sort( function (a, b){ return a - b}); // Returning the product of first two numbers return arr[0] * arr[1]; } // Driver program to test above function let a = [ 11, 8 , 5 , 7 , 5 , 100 ]; let n = a.Length; console.log(printMinimumProduct(a,n)); // This code is contributed by Aman Kumar |
C#
// C# program for the above approach using System; class GFG { //function to calculate minimum product of pair static int printMinimumProduct( int []arr, int n) { // first sort the array Array.Sort(arr); // returning the product of first two numbers return arr[0] * arr[1]; } // driver program static void Main() { int []a = { 11, 8 , 5 , 7 ,5 , 100 }; int n = a.Length; Console.WriteLine(printMinimumProduct(a, n)); } } |
25
Time Complexity: O( n * log(n))
Auxiliary Space: O(1)
An efficient approach using keep track of two minimum elements:
The idea is to linearly traverse a given array and keep track of a minimum of two elements. Finally, return the product of two minimum elements.
Below is the implementation of the above approach.
C++
// C++ program to calculate minimum // product of a pair #include <bits/stdc++.h> using namespace std; // Function to calculate minimum product // of pair int printMinimumProduct( int arr[], int n) { // Initialize first and second // minimums. It is assumed that the // array has at least two elements. int first_min = min(arr[0], arr[1]); int second_min = max(arr[0], arr[1]); // Traverse remaining array and keep // track of two minimum elements (Note // that the two minimum elements may // be same if minimum element appears // more than once) // more than once) for ( int i=2; i<n; i++) { if (arr[i] < first_min) { second_min = first_min; first_min = arr[i]; } else if (arr[i] < second_min) second_min = arr[i]; } return first_min * second_min; } // Driver program to test above function int main() { int a[] = { 11, 8 , 5 , 7 , 5 , 100 }; int n = sizeof (a) / sizeof (a[0]); cout << printMinimumProduct(a,n); return 0; } |
Java
// Java program to calculate minimum // product of a pair import java.util.*; class GFG { // Function to calculate minimum product // of pair static int printMinimumProduct( int arr[], int n) { // Initialize first and second // minimums. It is assumed that the // array has at least two elements. int first_min = Math.min(arr[ 0 ], arr[ 1 ]); int second_min = Math.max(arr[ 0 ], arr[ 1 ]); // Traverse remaining array and keep // track of two minimum elements (Note // that the two minimum elements may // be same if minimum element appears // more than once) // more than once) for ( int i = 2 ; i < n; i++) { if (arr[i] < first_min) { second_min = first_min; first_min = arr[i]; } else if (arr[i] < second_min) second_min = arr[i]; } return first_min * second_min; } /* Driver program to test above function */ public static void main(String[] args) { int a[] = { 11 , 8 , 5 , 7 , 5 , 100 }; int n = a.length; System.out.print(printMinimumProduct(a,n)); } } // This code is contributed by Arnav Kr. Mandal. |
Python3
# Python program to # calculate minimum # product of a pair # Function to calculate # minimum product # of pair def printMinimumProduct(arr,n): # Initialize first and second # minimums. It is assumed that the # array has at least two elements. first_min = min (arr[ 0 ], arr[ 1 ]) second_min = max (arr[ 0 ], arr[ 1 ]) # Traverse remaining array and keep # track of two minimum elements (Note # that the two minimum elements may # be same if minimum element appears # more than once) # more than once) for i in range ( 2 ,n): if (arr[i] < first_min): second_min = first_min first_min = arr[i] else if (arr[i] < second_min): second_min = arr[i] return first_min * second_min # Driver code a = [ 11 , 8 , 5 , 7 , 5 , 100 ] n = len (a) print (printMinimumProduct(a,n)) # This code is contributed # by Anant Agarwal. |
Javascript
<script> // Javascript program to calculate minimum // product of a pair // Function to calculate minimum product // of pair function printMinimumProduct(arr, n) { // Initialize first and second // minimums. It is assumed that the // array has at least two elements. let first_min = Math.min(arr[0], arr[1]); let second_min = Math.max(arr[0], arr[1]); // Traverse remaining array and keep // track of two minimum elements (Note // that the two minimum elements may // be same if minimum element appears // more than once) // more than once) for (let i=2; i<n; i++) { if (arr[i] < first_min) { second_min = first_min; first_min = arr[i]; } else if (arr[i] < second_min) second_min = arr[i]; } return first_min * second_min; } // Driver program to test above function let a = [ 11, 8 , 5 , 7 , 5 , 100 ]; let n = a.length; document.write(printMinimumProduct(a,n)); // This code is contributed by Mayank Tyagi </script> |
C#
// C# program to calculate minimum // product of a pair using System; class GFG { // Function to calculate minimum // product of pair static int printMinimumProduct( int []arr, int n) { // Initialize first and second // minimums. It is assumed that // the array has at least two // elements. int first_min = Math.Min(arr[0], arr[1]); int second_min = Math.Max(arr[0], arr[1]); // Traverse remaining array and // keep track of two minimum // elements (Note that the two // minimum elements may be same // if minimum element appears // more than once) for ( int i = 2; i < n; i++) { if (arr[i] < first_min) { second_min = first_min; first_min = arr[i]; } else if (arr[i] < second_min) second_min = arr[i]; } return first_min * second_min; } /* Driver program to test above function */ public static void Main() { int []a = { 11, 8 , 5 , 7 , 5 , 100 }; int n = a.Length; Console.WriteLine( printMinimumProduct(a, n)); } } // This code is contributed by vt_m. |
PHP
<?php // PHP program to calculate minimum // product of a pair // Function to calculate minimum // product of pair function printMinimumProduct( $arr , $n ) { // Initialize first and second // minimums. It is assumed that the // array has at least two elements. $first_min = min( $arr [0], $arr [1]); $second_min = max( $arr [0], $arr [1]); // Traverse remaining array and keep // track of two minimum elements (Note // that the two minimum elements may // be same if minimum element appears // more than once) // more than once) for ( $i = 2; $i < $n ; $i ++) { if ( $arr [ $i ] < $first_min ) { $second_min = $first_min ; $first_min = $arr [ $i ]; } else if ( $arr [ $i ] < $second_min ) $second_min = $arr [ $i ]; } return $first_min * $second_min ; } // Driver Code $a = array (11, 8 , 5 , 7 , 5 , 100); $n = sizeof( $a ); echo (printMinimumProduct( $a , $n )); // This code is contributed by Ajit. ?> |
25
Time Complexity: O(n)
Auxiliary Space: O(1)
This article is contributed by Raja Vikramaditya. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Login to comment...