力扣643题
题目描述:子数组最大平均数Ⅰ
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-average-subarray-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
![image.png](https://i-blog.csdnimg.cn/blog_migrate/c61128a497eb7526cb5560bf0f4bcdbd.png)
题解思路:
1.定义需要维护的变量sum 和maxAvg 2.定义窗口的首尾端(start, end),然后滑动窗口 3.更新需要 维护的变量(sum 和maxAvg)不断把当前值积累到sum上 4.根据题意知窗口长度固定,用if;窗口首指针前移一个单位保证窗口长度固定,同时更新需要维护的变量(sum) 5.返回答案
class Solution {
public double findMaxAverage(int[] nums, int k) {
//1.定义需要维护的变量sum 和maxAvg
double sum = 0;
double maxAug = Double.NEGATIVE_INFINITY;
//2.定义窗口的首尾端(start, end),然后滑动窗口
int start = 0;
for (int end = 0; end< nums.length;end++){
//3.更新需要 维护的变量(sum 和maxAvg)不断把当前值积累到sum上
sum += nums[end];
if (end - start+1 == k){
maxAug = Math.max(maxAug, sum / k);
}
//4.根据题意知窗口长度固定,用if
//窗口首指针前移一个单位保证窗口长度固定,同时更新需要维护的变量(sum)
if (end + 1>=k){
sum -= nums[start];
start++;
}
}
//5.返回答案
return maxAug;
}
}