C ++中的最大平均子数组I

假设我们有一个包含n个元素的数组,我们必须找到给定长度k的具有最大平均值的连续子数组。我们必须返回最大平均值。

因此,如果输入类似于[1,13,-5,-8,48,3]且k = 4,则输出将为12.0,如(13-5-8 + 48)/ 4 = 12.0。

为了解决这个问题,我们将遵循以下步骤-

  • 和:= 0

  • 对于初始化i:= 0,当i <k时,更新(将i增加1),执行-

    • sum:= sum + nums [i]

  • 最大:=总和

  • 对于初始化i:= k,当i <nums的大小时,更新(将i增加1),执行-

    • 最大:=总和

    • sum:= sum + nums [i]-nums [i-k]

    • 如果sum> maxi,则-

  • 返回最大值/ k

例 

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   double findMaxAverage(vector<int>& nums, int k) {
      int sum = 0;
      for (int i = 0; i < k; i++) {
         sum += nums[i];
      }
      double maxi = sum;
      for (int i = k; i < nums.size(); i++) {
         sum += nums[i] - nums[i - k];
         if (sum > maxi) {
            maxi = sum;
         }
      }
      return maxi / k;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,13,-5,-8,48,3};
   cout << (ob.findMaxAverage(v, 4));
}

输入值

{1,13,-5,-8,48,3}, 4

输出结果

12