Given two arrays, calculate the product of max element of first array and min element of second array.
Examples :
Input : arr1[] = {5, 7, 9, 3, 6, 2},
arr2[] = {1, 2, 6, -1, 0, 9}
Output : Max in first array is 9, min in second is -1, so product = -9.Input : arr1[] = {1, 4, 2, 3, 10, 2},
arr2[] = {4, 2, 6, 5, 2, 9}
Output : Max in first array is 10, min in second is 2, so product = 20.
Try It Yourself
Table of Content
[Naive Approach] Using Sorting - O(n log n + m log m) Time and O(1) Space
We first sort both arrays. Then we easily find max in first array and min in second array. Finally, we return product of min and max.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int minMaxProduct(vector<int> &arr1, vector<int> &arr2)
{
// Sort both vectors
sort(arr1.begin(), arr1.end());
sort(arr2.begin(), arr2.end());
// Return product of max of arr1 and min of arr2
return arr1.back() * arr2.front();
}
int main()
{
vector<int> arr1 = {10, 2, 3, 6, 4, 1};
vector<int> arr2 = {5, 1, 4, 2, 6, 9};
cout << minMaxProduct(arr1, arr2);
return 0;
}
import java.util.*;
class gfg {
static int minMaxProduct(ArrayList<Integer> arr1, ArrayList<Integer> arr2) {
// Sort the arrays to find
// the maximum and minimum
// elements in given arrays
Collections.sort(arr1);
Collections.sort(arr2);
// Return product of
// maximum and minimum.
return arr1.get(arr1.size() - 1) * arr2.get(0);
}
public static void main(String[] args) {
ArrayList<Integer> arr1 = new ArrayList<>(Arrays.asList(10, 2, 3, 6, 4, 1));
ArrayList<Integer> arr2 = new ArrayList<>(Arrays.asList(5, 1, 4, 2, 6, 9));
System.out.println(minMaxProduct(arr1, arr2));
}
}
def minMaxProduct(arr1, arr2):
# Sort the arrays to find
# the maximum and minimum
# elements in given arrays
arr1.sort()
arr2.sort()
# Return product of
# maximum and minimum.
return arr1[-1] * arr2[0]
arr1 = [10, 2, 3, 6, 4, 1]
arr2 = [5, 1, 4, 2, 6, 9]
print(minMaxProduct(arr1, arr2))
using System;
using System.Collections.Generic;
class Program
{
static int MinMaxProduct(List<int> arr1, List<int> arr2)
{
// Sort the arrays to find
// the maximum and minimum
// elements in given arrays
arr1.Sort();
arr2.Sort();
// Return product of
// maximum and minimum.
return arr1[arr1.Count - 1] * arr2[0];
}
static void Main()
{
List<int> arr1 = new List<int> { 10, 2, 3, 6, 4, 1 };
List<int> arr2 = new List<int> { 5, 1, 4, 2, 6, 9 };
Console.WriteLine(MinMaxProduct(arr1, arr2));
}
}
function minMaxProduct(arr1, arr2) {
// Sort the arrays to find
// the maximum and minimum
// elements in given arrays
arr1.sort((a, b) => a - b);
arr2.sort((a, b) => a - b);
// Return product of
// maximum and minimum.
return arr1[arr1.length - 1] * arr2[0];
}
const arr1 = [10, 2, 3, 6, 4, 1];
const arr2 = [5, 1, 4, 2, 6, 9];
// Driver code
console.log(minMaxProduct(arr1, arr2));
Output
10
[Expected Approach] Using for loop - O(n + m) Time and O(1) Space
Traverse the first array to find its maximum element and the second array to find its minimum element. Multiply these two values to get the final result.
#include <iostream>
#include <vector>
using namespace std;
int minMaxProduct(vector<int> &arr1, vector<int> &arr2)
{
int maxi = arr1[0];
int mini = arr2[0];
// Find max in arr1
for (int i = 1; i < arr1.size(); i++)
if (arr1[i] > maxi)
maxi = arr1[i];
// Find min in arr2
for (int i = 1; i < arr2.size(); i++)
if (arr2[i] < mini)
mini = arr2[i];
return maxi * mini;
}
int main()
{
vector<int> arr1 = {10, 2, 3, 6, 4, 1};
vector<int> arr2 = {5, 1, 4, 2, 6, 9};
cout << minMaxProduct(arr1, arr2) << endl;
return 0;
}
import java.util.*;
class GfG {
static int minMaxProduct(ArrayList<Integer> arr1, ArrayList<Integer> arr2)
{
int maxi = arr1.get(0);
int mini = arr2.get(0);
// Find the maximum
// element in first array
for (int i = 1; i < arr1.size(); i++)
if (arr1.get(i) > maxi)
maxi = arr1.get(i);
// Find the minimum
// element in second array
for (int i = 1; i < arr2.size(); i++)
if (arr2.get(i) < mini)
mini = arr2.get(i);
return maxi * mini;
}
public static void main(String[] args)
{
ArrayList<Integer> arr1 = new ArrayList<>(Arrays.asList(10, 2, 3, 6, 4, 1));
ArrayList<Integer> arr2 = new ArrayList<>(Arrays.asList(5, 1, 4, 2, 6, 9));
System.out.println(minMaxProduct(arr1, arr2));
}
}
def minMaxProduct(arr1, arr2):
maxi = arr1[0]
mini = arr2[0]
# Find the maximum
# element in first array
for i in range(1, len(arr1)):
if arr1[i] > maxi:
maxi = arr1[i]
# Find the minimum
# element in second array
for i in range(1, len(arr2)):
if arr2[i] < mini:
mini = arr2[i]
return maxi * mini
arr1 = [10, 2, 3, 6, 4, 1]
arr2 = [5, 1, 4, 2, 6, 9]
print(minMaxProduct(arr1, arr2))
using System;
using System.Collections.Generic;
class GfG
{
static int MinMaxProduct(List<int> arr1, List<int> arr2)
{
int maxi = arr1[0];
int mini = arr2[0];
// Find the maximum
// element in first array
for (int i = 1; i < arr1.Count; i++)
if (arr1[i] > maxi)
maxi = arr1[i];
// Find the minimum
// element in second array
for (int i = 1; i < arr2.Count; i++)
if (arr2[i] < mini)
mini = arr2[i];
return maxi * mini;
}
static void Main()
{
List<int> arr1 = new List<int> { 10, 2, 3, 6, 4, 1 };
List<int> arr2 = new List<int> { 5, 1, 4, 2, 6, 9 };
Console.WriteLine(MinMaxProduct(arr1, arr2));
}
}
function minMaxProduct(arr1, arr2)
{
let maxi = arr1[0];
let mini = arr2[0];
// Find the maximum
// element in first array
for (let i = 1; i < arr1.length; i++)
if (arr1[i] > maxi)
maxi = arr1[i];
// Find the minimum
// element in second array
for (let i = 1; i < arr2.length; i++)
if (arr2[i] < mini)
mini = arr2[i];
return maxi * mini;
}
// driver code
const arr1 = [10, 2, 3, 6, 4, 1];
const arr2 = [5, 1, 4, 2, 6, 9];
console.log(minMaxProduct(arr1, arr2));
Output
10