假设我们有一个包含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