给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
示例:
输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
提示:
1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。
思路:
遍历整个数组长为k的子数组,求和去平均数。
可以采用上一次遍历的和值减去上一次的首段再加上新的尾部来计算。
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int n=nums.size();
double ave=0;
double sum=0;
double max_ave=-10000; //此处设定初始值是为了方便比较找出最大平均数`
for(int i=0;i<k;i++)
{
sum+=nums[i];
}
ave=sum/(double)k;
max_ave=max(ave,max_ave);
for(int m=1;m<=n-k;m++)
{
sum=sum-nums[m-1]+nums[m+k-1];
ave=sum/(double)k;
max_ave=max(ave,max_ave);
}
return max_ave;
}
};