目录
题目一:子数组最大平均数 I
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
解题思路:
设置一个长度为K的“窗口”,不断移动窗口,每次滑动窗口时,计算窗口此时的平均值,直到窗口的右边界为数组的最后一个元素。
需要注意的是结果的数据类型需要为精度更高的double型数据,不然仅仅用float会导致精度不够会导致答案错误。
代码:
double findMaxAverage(int* nums, int numsSize, int k){
int i = 0;
double sum = 0;
for(i=0; i<k; i++)
{
sum = nums[i] + sum;
}
double max = sum / k; //记录数组前k个值的平均数
double ave; //记录每次滑动窗口的平均值
for(i=k; i<numsSize; i++)
{
sum = sum + nums[i]; //新增的值
sum = sum - nums[i-k]; //需要减去的值
ave = sum / k;
if(ave >= max)
max = ave;
}
return max;
}
<