题目:
给一个整数数组,找出【平均数最大】且【长度为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;
}
}
该博客介绍了如何解决寻找整数数组中长度为k的最大平均数子数组的问题,这是一个典型的滑动窗口应用。通过遍历数组,维护窗口内元素的和,并不断更新最大平均值。在给定的例子中,对于数组[1,12,-5,-6,50,3]和k=4,最大平均数为12.75。算法首先统计第一个窗口的和,然后移除旧窗口的第一个元素并加入新元素,保持窗口大小不变,同时记录最大元素和。
485

被折叠的 条评论
为什么被折叠?



