# Longest Sub-array with maximum average value

Given an array arr[] of n integers. The task is to find the maximum length of the sub-array which has the maximum average value (average of the elements of the sub-array). Examples:

Input: arr[] = {2, 3, 4, 5, 6}
Output: 1
{6} is the required sub-array

Input: arr[] = {6, 1, 6, 6, 0}
Output: 2
{6} and {6, 6} are the sub-arrays with maximum average value.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• Average of any sub-array cannot exceed the maximum value of the array.
• The possible maximum value of the average will be the maximum element from the array.
• So to find the maximum length sub-array with the maximum average value, we have to find the max length of the sub-array where every element of the sub-array is same and equal to the maximum element from the array.

Below is the implementation of the above approach:

## C++

 // C++ implementation of the approach  #include  using namespace std;     // Function to return the max length of the  // sub-array that have the maximum average  // (average value of the elements)  int maxLenSubArr(int a[], int n)  {      int count, j;      int cm = 1, max = 0;         // Finding the maximum value      for (int i = 0; i < n; i++) {          if (a[i] > max)              max = a[i];      }         for (int i = 0; i < n - 1;) {          count = 1;             // If consecutive maximum found          if (a[i] == a[i + 1] && a[i] == max) {                 // Find the max length of consecutive max              for (j = i + 1; j < n; j++) {                  if (a[j] == max) {                      count++;                      i++;                  }                  else                     break;              }                 if (count > cm)                  cm = count;          }          else             i++;      }         return cm;  }     // Driver code  int main()  {      int arr[] = { 6, 1, 6, 6, 0 };      int n = sizeof(arr) / sizeof(arr);         cout << maxLenSubArr(arr, n);         return 0;  }

## Java

 // Java implementation of the approach  class GFG  {         // Function to return the max length of the  // sub-array that have the maximum average  // (average value of the elements)  static int maxLenSubArr(int a[], int n)  {      int count, j;      int cm = 1, max = 0;         // Finding the maximum value      for (int i = 0; i < n; i++)       {          if (a[i] > max)              max = a[i];      }         for (int i = 0; i < n - 1; )      {          count = 1;             // If consecutive maximum found          if (a[i] == a[i + 1] && a[i] == max)           {                 // Find the max length of consecutive max              for (j = i + 1; j < n; j++)               {                  if (a[j] == max)                  {                      count++;                      i++;                  }                  else                     break;              }                 if (count > cm)                  cm = count;          }          else             i++;      }         return cm;  }     // Driver code  public static void main(String[] args)   {      int arr[] = { 6, 1, 6, 6, 0 };      int n = arr.length;         System.out.println(maxLenSubArr(arr, n));  }  }     // This code is contributed by Code_Mech.

## Python3

 # Python3 implementation of the approach      # Function to return the max length of the   # sub-array that have the maximum average   # (average value of the elements)   def maxLenSubArr(a, n):          cm, Max = 1, 0        # Finding the maximum value       for i in range(0, n):           if a[i] > Max:               Max = a[i]                     i = 0     while i < n - 1:           count = 1            # If consecutive maximum found           if a[i] == a[i + 1] and a[i] == Max:                  # Find the max length of               # consecutive max               for j in range(i + 1, n):                   if a[j] == Max:                       count += 1                     i += 1                                    else:                      break                            if count > cm:                   cm = count                      else:              i += 1                        i += 1        return cm      # Driver code   if __name__ == "__main__":         arr = [6, 1, 6, 6, 0]       n = len(arr)          print(maxLenSubArr(arr, n))     # This code is contributed by   # Rituraj Jain

## C#

 // C# implementation of the approach  using System;     class GFG  {             // Function to return the max length of the  // sub-array that have the maximum average  // (average value of the elements)  static int maxLenSubArr(int []a, int n)  {      int count, j;      int cm = 1, max = 0;         // Finding the maximum value      for (int i = 0; i < n; i++)       {          if (a[i] > max)              max = a[i];      }         for (int i = 0; i < n - 1; )      {          count = 1;             // If consecutive maximum found          if (a[i] == a[i + 1] && a[i] == max)           {                 // Find the max length of consecutive max              for (j = i + 1; j < n; j++)               {                  if (a[j] == max)                  {                      count++;                      i++;                  }                  else                     break;              }              if (count > cm)                  cm = count;          }          else             i++;      }      return cm;  }         // Driver code      static public void Main ()      {                 int []arr = { 6, 1, 6, 6, 0 };          int n = arr.Length;          Console.WriteLine(maxLenSubArr(arr, n));      }  }     // This code is contributed by ajit.

## PHP

  $max)   $max = $a[$i];       }          for ($i = 0; $i < $n - 1;)   {   $count = 1;              // If consecutive maximum found           if ($a[$i] == $a[$i + 1] &&               $a[$i] == $max)   {     // Find the max length of   // consecutive max   for ($j = $i + 1; $j < $n; $j++)              {                   if ($a[$j] == $max)   {   $count++;                       $i++;   }   else  break;   }     if ($count > $cm)   $cm = $count;   }   else  $i++;       }          return $cm;  }    // Driver code  $arr = array( 6, 1, 6, 6, 0 );   $n = sizeof($arr);      echo maxLenSubArr($arr, $n);      // This code is contributed by Ryuga  ?>

Output:

2


My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.