子数组最大平均数。采用滑动窗口方法。

子数组最大平均数

给一个整数数组,找出平均数最大且长度为k的下标连续的子数组,并输出该最大平均数。

示例 1:

1输入:nums = [1,12,-5,-6,50,3],k = 4
2输出:12.75
3解释:连续子数组 [12-5-6+50] = 51/4 = 12.75 。

思路

这题是固定的连续子数组,不可以使用动态规划,这里使用滑动窗口

依次计算窗口内的值,不需要重新计算,只需要减去脱离窗口的值,和加上新滑动到窗口的值即可

解题

 1//本质还是双指针
 2public static double findMaxAverage(int[] nums, int k)
 3{
 4    int sum = 0;//k个元素的和
 5    //先求得第一个sum的窗口值
 6    for(int i = 0; i < k ;i++)
 7    {
 8        sum += nums[i];
 9    }
10    //默认滑动窗口的第一个值sum为最大值
11    int max = sum;
12    for(int i = k; i < nums.length; i++)
13    {
14        //除去之前的,增加新元素
15        sum = sum - nums[i - k] + nums[i];
16        max = Math.max(max, sum);
17    }
18    
19    return 1.0 * max / k;
20}