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