给定一个由 n 个整数组成的数组 arr 和一个整数 k,请找出平均值最大的、长度为 k 的连续子数组,并返回该最大平均值,要求答案保留 2 位小数。
第一行:一个整数 n,表示数组的长度。
第二行: n 个整数。
第三行:一个整数 k ,表示子数组的长度。
输出一个浮点数,表示满足条件的最大平均数。
6
1 12 -5 -6 5 -3
4
1.50
即 arr2∼arr5 的总和 412−5−6+5=1.5。
80pts CODE:
#include<cstdio>
#include<algorithm>
int n,a[200010],b[200010];
int right,left,cnt=-1e5;
double sum,k;
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%lf",&k);
for(int i=1;i<=n;i++)
b[i]=a[i]+b[i-1];
// for(int i=1;i<=n;i++)
// printf("%d ",b[i]);
// printf("\n");
for(left=1;left<=n;left++){
right=left+k-1;
if(right>n) break;
//printf("%d %d %d %d\n",b[right]-b[left-1],cnt,left,right);
cnt=std::max(cnt,b[right]-b[left-1]);
}sum=cnt;
printf("%.2lf\n",sum/k);
return 0;
}
思路:前缀和+模拟。
感谢各位大佬。