题目:
给一个整数数组,找出【平均数最大】且【长度为k】的下标连续 的子数组,并输出该子数组最大平均数。
输入:[1,12,-5,-6,50,3],k=4
输出:12.75
最大平均数:(12-5-6+50)/4 = 51/4 = 12.75
分析:典型的滑动窗口问题。
1、先统计第一个滑动窗口的和,默认第一个滑动窗口的和最大。
2、去掉旧窗口中下标最小的值,引入数组中下一个值,得到新窗口。
下一个值指的是:窗口的大小+1
3、使用Math.max(旧窗口元素和,新窗口元素和) 函数得到 元素和 最大的子数组。
4、求一下平均数就好。
public class MaxAverage{
public static double findMaxAverage(int[] nums,int k){
int sum = 0;
for(int i=0;i<k;i++){//统计第一个滑动窗口的和
sum += nums[i];
}
max = sum;//默认第一个滑动窗口中元素的和最大
for(int i=k;i<nums.length;i++){
sum = sum - nums[i-k] + nums[i];//去掉旧窗口的第一个值,引入数组中下一个值
max = Math.max(max,sum);
}
return 1.0 * max / k;
}
}