Find pair with maximum ratio in an Array
Last Updated :
30 Mar, 2022
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 –
Input: arr[] = { 15, 10, 3, 2 }
Output: 7.5
Explanation:
Maximum ratio pair will be –
Approach: The idea is to iterate over every possible pair of the array using two nested loops and find the maximum ratio pair possible. For any pair, the maximum ratio can be obtained using
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
float computeMaxValue( float arr[], int n)
{
float ans = 0;
for ( int i = 0; i < n - 1; i++) {
for ( int j = i + 1; j < n; j++) {
float val = max(arr[i] / arr[j],
arr[j] / arr[i]);
ans = max(ans, val);
}
}
return ans;
}
int main()
{
float arr[] = { 15, 10, 3, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << computeMaxValue(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static float computeMaxValue( float arr[], int n)
{
float ans = 0 ;
for ( int i = 0 ; i < n - 1 ; i++)
{
for ( int j = i + 1 ; j < n; j++)
{
float val = Math.max(arr[i] / arr[j],
arr[j] / arr[i]);
ans = Math.max(ans, val);
}
}
return ans;
}
public static void main(String[] args)
{
float arr[] = { 15 , 10 , 3 , 2 };
int N = arr.length;
System.out.println(computeMaxValue(arr, N));
}
}
|
Python3
def computeMaxValue(arr, n):
ans = 0
for i in range (n - 1 ):
for j in range (i + 1 , n):
val = max (arr[i] / arr[j],
arr[j] / arr[i])
ans = max (ans, val)
return ans
if __name__ = = "__main__" :
arr = [ 15 , 10 , 3 , 2 ]
n = len (arr)
print (computeMaxValue(arr, n))
|
C#
using System;
class GFG {
static float computeMaxValue( float []arr, int n)
{
float ans = 0;
for ( int i = 0; i < n - 1; i++)
{
for ( int j = i + 1; j < n; j++)
{
float val = Math.Max(arr[i] / arr[j],
arr[j] / arr[i]);
ans = Math.Max(ans, val);
}
}
return ans;
}
public static void Main(String[] args)
{
float []arr = { 15, 10, 3, 2 };
int N = arr.Length;
Console.WriteLine(computeMaxValue(arr, N));
}
}
|
Javascript
<script>
function computeMaxValue(arr, n)
{
var ans = 0;
for ( var i = 0; i < n - 1; i++) {
for ( var j = i + 1; j < n; j++) {
var val = Math.max(arr[i] / arr[j],
arr[j] / arr[i]);
ans = Math.max(ans, val);
}
}
return ans;
}
var arr = [ 15, 10, 3, 2 ];
var n = arr.length;
document.write( computeMaxValue(arr, n));
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(1)
Approach-2 For a[i]>0
As the maximum ratio can be obtained when the denominator is minimum.
- So store the index of the minimum element of the array.
- Loop through the array and divide each integer with the minimum number.
- Maintain a running maximum.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int minNum( float a[], int n)
{
int indOfMin = 0;
for ( int i = 0; i < n; i++) {
if (a[i] < a[indOfMin])
indOfMin = i;
}
return indOfMin;
}
float computeMaxValue( float a[], int n)
{
int minIndex = minNum(a, n);
float ans = INT_MIN;
for ( int i = 0; i < n; i++) {
if (i != minIndex) {
float temp = float (a[i]) / float (a[minIndex]);
ans = max(ans, temp);
}
}
return ans;
}
int main()
{
float arr[] = { 15, 10, 3, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << computeMaxValue(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static int minNum( float a[], int n)
{
int indOfMin = 0 ;
for ( int i = 0 ; i < n; i++) {
if (a[i] < a[indOfMin])
indOfMin = i;
}
return indOfMin;
}
static float computeMaxValue( float a[], int n)
{
int minIndex = minNum(a, n);
float ans = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++) {
if (i != minIndex) {
float temp
= ( float )a[i] / ( float )a[minIndex];
if (temp > ans)
ans = temp;
}
}
return ans;
}
public static void main(String[] args)
{
float arr[] = { 15 , 10 , 3 , 2 };
int N = arr.length;
System.out.println(computeMaxValue(arr, N));
}
}
|
Python3
def minNum(a, n):
indOfMin = 0
for i in range ( 0 , n):
if (a[i] < a[indOfMin]):
indOfMin = i
return indOfMin
def computeMaxValue(a, n):
minIndex = minNum(a, n)
ans = float ( '-inf' )
for i in range ( 0 , n):
if (i ! = minIndex):
temp = float (a[i]) / float (a[minIndex])
ans = max (ans, temp)
return ans
arr = [ 15 , 10 , 3 , 2 ]
n = len (arr)
print (computeMaxValue(arr, n))
|
C#
using System;
class GFG
{
static int minNum( float []a, int n)
{
int indOfMin = 0;
for ( int i = 0; i < n; i++) {
if (a[i] < a[indOfMin])
indOfMin = i;
}
return indOfMin;
}
static float computeMaxValue( float []a, int n)
{
int minIndex = minNum(a, n);
float ans = Int32.MinValue;
for ( int i = 0; i < n; i++) {
if (i != minIndex) {
float temp
= ( float )a[i] / ( float )a[minIndex];
if (temp > ans)
ans = temp;
}
}
return ans;
}
public static void Main(String[] args)
{
float []arr = { 15, 10, 3, 2 };
int N = arr.Length;
Console.WriteLine(computeMaxValue(arr, N));
}
}
|
Javascript
<script>
function minNum(a, n)
{
var indOfMin = 0;
for ( var i = 0; i < n; i++) {
if (a[i] < a[indOfMin])
indOfMin = i;
}
return indOfMin;
}
function computeMaxValue( a, n)
{
var minIndex = minNum(a, n);
var ans = Number.MIN_VALUE;
for ( var i = 0; i < n; i++) {
if (i != minIndex) {
var temp = Number(a[i]) / Number(a[minIndex]);
ans = Math.max(ans, temp);
}
}
return ans;
}
var arr = [15, 10, 3, 2 ];
var n = arr.length;
document.write(computeMaxValue(arr, n));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...