子数组最大平均数
200 Words|Read in about 1 Min|本文总阅读量次
子数组最大平均数。采用滑动窗口方法。
子数组最大平均数
给一个整数数组,找出平均数最大且长度为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}