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