📌  相关文章
📜  最长的子数组,具有最大的平均值

📅  最后修改于: 2021-05-04 21:10:05             🧑  作者: Mango

给定一个n个整数的数组arr [] 。任务是找到具有最大平均值(子阵列元素的平均值)的子阵列的最大长度。

     $$   Average = \frac{1}{n} \times\sum_{1}^{n} a_{i} $$

例子:

方法:

  • 任何子数组的平均值不能超过数组的最大值。
  • 平均值的可能最大值将是数组中的最大元素。
  • 因此,要找到具有最大平均值的最大长度子数组,我们必须找到子数组的最大长度,其中子数组的每个元素都相同并且等于数组中的最大元素。

下面是上述方法的实现:

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[0]);
  
    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
?>


输出:
2