解题思路:
- 定义一个sum,用循环将窗口大小为k的子数组内元素和统计到sum中
- 定义一个maxSum求每个窗口中的最大值
- 窗口滑动,sum统计新窗口的和
- 将新窗口的和sum与前一个窗口的和maxSum比较,将最大值返回给maxSum
- 最后返回窗口和最大子数组的平均值
假设k = 4,第一个循环计算前四个数的和,然后第二个循环实现窗口滑动,此时窗口内的数据为12,-5,-6,30,此窗口和为前一窗口和减去前一窗口第一个元素再加上新进入窗口的元素,如此重复直到循环结束即可求出所有窗口的和。
class Solution {
public double findMaxAverage(int[] nums, int k) {
int sum = 0;
for(int i = 0; i < k; i++){
sum += nums[i];
}
int maxSum = sum;
for(int i = k; i < nums.length; i++){
sum = sum - nums[i - k] + nums[i];
maxSum = Math.max(maxSum, sum);
}
return 1.0 * maxSum / k;
}
}