How to write a program for minimum product pair an array of positive Integers in C++

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.

Simple Approach : A simple approach will be to run two nested loops to generate all possible pair of elements and keep track of the minimum product. 
Time Complexity: O( n * n) 
Auxiliary Space: O( 1 )

Better Approach: An efficient approach will be to first sort the given array and print the product of first two numbers, sorting will take O(n log n). Answer will be then a[0] * a[1] 
Time Complexity: O( n * log(n)) 
Auxiliary Space: O( 1 )

Best Approach: The idea is linearly traverse given array and keep track of minimum two elements. Finally return product of two minimum elements.
Below is the implementation of 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;
}

Output: 

25

 

Submit Your Programming Assignment Details