leectcode每日一题 2021.2.4 简单易懂版本。
643. 子数组最大平均数 I
采用滑动窗口进行处理;
题干:求连续给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
解析:因为长度为k,是一个固定的数字,因此可采用滑动窗口维护一段长度为k的区间和的最大值。
做法:先求出前k项的和(即 下标0到k-1 这k个数字的区间和),记为sum,从下标为k的数字开始遍历,每次让sum减去区间第一个数字(下标为i-k),加上区间最后一个数字的下一位(下标为i),就实现了窗口的滑动。同时记录下窗口滑动过程中的最大值,即为答案。
//
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
int sum=0;
for(int i=0;i<k;i++){
sum+=nums[i];
}
int Size=nums.size();
int ans=sum;
for(int i=k;i<Size;i++){
sum-=nums[i-k];
sum+=nums[i];
ans=max(sum,ans);
}
return ans*1.0/k;//整数类型转换成浮点类型
}
};