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