Given an array arr[] of N numbers, the task is to find the largest ratio of contiguous subarray from the given array.
Examples:
Input: arr = { -1, 10, 0.1, -8, -2 }
Output: 100
Explanation:
The subarray {10, 0.1} gives 10 / 0.1 = 100 which is the largest ratio.
Input: arr = { 2, 2, 4, -0.2, -1 }
Output: 20
Explanation:
The subarray {4, -0.2, -1} has the largest ratio as 20.
Approach: The idea is to generate all the subarrays of the array and for each subarray, find the ratio of the subarray as arr[i] / arr[i+1] / arr[i+2] and so on. Keep track of the maximum ratio and return it at the end.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
double maximum( double a, double b)
{
if (a > b)
return a;
return b;
}
double maxSubarrayRatio(
double arr[], int n)
{
double maxRatio = INT_MIN;
for ( int i = 0; i < n; i++) {
for ( int j = i; j < n; j++) {
double ratio = arr[i];
for ( int k = i + 1; k <= j; k++) {
ratio = ratio / arr[k];
}
maxRatio = maximum(maxRatio, ratio);
}
}
return maxRatio;
}
int main()
{
double arr[] = { 2, 2, 4, -0.2, -1 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << maxSubarrayRatio(arr, n);
return 0;
}
|
Java
class GFG{
static double maximum( double a, double b)
{
if (a > b)
return a;
return b;
}
static double maxSubarrayRatio( double arr[],
int n)
{
double maxRatio = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
{
for ( int j = i; j < n; j++)
{
double ratio = arr[i];
for ( int k = i + 1 ; k <= j; k++)
{
ratio = ratio / arr[k];
}
maxRatio = maximum(maxRatio, ratio);
}
}
return maxRatio;
}
public static void main(String[] args)
{
double arr[] = { 2 , 2 , 4 , - 0.2 , - 1 };
int n = arr.length;
System.out.println(maxSubarrayRatio(arr, n));
}
}
|
Python3
import sys
def maximum(a, b):
if (a > b):
return a
return b
def maxSubarrayRatio(arr, n):
maxRatio = - sys.maxsize - 1
for i in range (n):
for j in range (i, n):
ratio = arr[i]
for k in range (i + 1 , j + 1 ):
ratio = ratio / / arr[k]
maxRatio = maximum(maxRatio, ratio)
return int (maxRatio)
if __name__ = = "__main__" :
arr = [ 2 , 2 , 4 , - 0.2 , - 1 ]
n = len (arr)
print (maxSubarrayRatio(arr, n))
|
C#
using System;
class GFG{
static double maximum( double a, double b)
{
if (a > b)
return a;
return b;
}
static double maxSubarrayRatio( double []arr,
int n)
{
double maxRatio = int .MinValue;
for ( int i = 0; i < n; i++)
{
for ( int j = i; j < n; j++)
{
double ratio = arr[i];
for ( int k = i + 1; k <= j; k++)
{
ratio = ratio / arr[k];
}
maxRatio = maximum(maxRatio, ratio);
}
}
return maxRatio;
}
public static void Main(String[] args)
{
double []arr = { 2, 2, 4, -0.2, -1 };
int n = arr.Length;
Console.WriteLine(maxSubarrayRatio(arr, n));
}
}
|
Javascript
<script>
function maximum(a, b)
{
if (a > b)
return a;
return b;
}
function maxSubarrayRatio(arr, n)
{
var maxRatio = -1000000000;
for ( var i = 0; i < n; i++)
{
for ( var j = i; j < n; j++)
{
var ratio = arr[i];
for ( var k = i + 1; k <= j; k++)
{
ratio = ratio / arr[k];
}
maxRatio = maximum(maxRatio, ratio);
}
}
return maxRatio;
}
var arr = [ 2, 2, 4, -0.2, -1 ];
var n = arr.length;
document.write( maxSubarrayRatio(arr, n));
</script>
|
Time Complexity: (N3)
Auxiliary Space: O(1)