文章目录
简介
滑动窗口是一种比喻的说法,就是在数组中,定长子数组不断向后更新,对于每个i开头的窗口,它的最后一个元素是i+k-1,其中k是窗口大小,也就是子数组长度,每次从i-1到i的更新,就是把i+k-1加入到窗口中,把i-1从窗口中移除,如下图所示。

下面总结了一下滑动窗口常见的题型。
求定长平均值最大的子数组
//滑动窗口
public double FindMaxAverage(int[] nums, int k) {
//求0-k总和
int sum = 0;
for(int i=0;i<k;++i){
sum+=nums[i];
}
//窗口中加入新的减掉旧的,sum记录最大值
int temp=sum;
for(int i=1;i+k-1<nums.Length;++i){
temp = temp + nums[i+k-1] - nums[i-1];
if(temp>sum) sum = temp;
}
return sum/(double)k;
}