滑动窗口我们可以看作在一个长的物体A上有个短一点的物体B从左到右滑动,每次滑动B和A都有不一样的新交点,如果我们将A和B按照固定长度分段,且给A标上不同的数字,那么B每次按照固定单位移动(为B的单位)都可以框选出不一样的数字,这些数字的和就是这次滑动后的值,从左到右每个单位的滑动都会有不一样的值,对这些值求最大值
画个图可能更清晰
图上是大小为4的数组,数组的值为{100,200,300,400},滑动窗口的大小windoSize为2,我们可以发现,每次滑动的时候其实都是加上一个右边的值,减去一个左边的值,窗口在初始的地方的值就是0~${windowSize-1}
代码如下:
public Integer maxSum(int[] array, int windowSize) {
if (array.length < windowSize) {
return -1;
}
int maxSum = 0;
for (int i = 0; i < windowSize; i++) {
maxSum += array[i];
}
int sum = maxSum;
for (int k = windowSize; k < array.length; k++) {
sum = sum + array[k] - array[k - windowSize];
maxSum = Math.max(maxSum, sum);
}
return maxSum;
}