零、题目
力扣https://leetcode-cn.com/problems/maximum-average-subarray-i/
一、 思路
1、
两层循环,一层是循环的起点,第二层是从起点开始+k个数的和,然后比较,大的留下
double findMaxAverage(int* nums, int numsSize, int k){
int max=-1000000;
int sum;
for(int i=0;i+k-1<numsSize;i++){ //1层循环,起点
sum=0;
for(int j=0;j<k;j++){ // 再从起点往后+k个数
sum+=nums[j+i];
}
if(sum>=max){ //大的留下
max=sum;
}
}
return (double)max/(double)k;
}
完美
然后超时了
2、
换一个思路,先算0到k和是多少,然后往后挪,剪掉前一个,加上后一个
double findMaxAverage(int* nums, int numsSize, int k){
int sum=0;
for(int i=0;i<k;i++){ //先算前k个的和
sum+=nums[i];
}
int max=sum;
int l=0,r=k; // 这是左边端点和右边端点
for(int p=0;r+p<numsSize;p++){
sum=sum+nums[r+p]-nums[l+p]; //把这个p+在l,r上,让这个长度k的区间右移
if(sum>max){
max=sum; //大的留下
}
}
return (double)max/k; //完事!
}