使用滑动窗口计算给定的数组中连续n个值的和的最大值

75 阅读1分钟

滑动窗口我们可以看作在一个长的物体A上有个短一点的物体B从左到右滑动,每次滑动B和A都有不一样的新交点,如果我们将A和B按照固定长度分段,且给A标上不同的数字,那么B每次按照固定单位移动(为B的单位)都可以框选出不一样的数字,这些数字的和就是这次滑动后的值,从左到右每个单位的滑动都会有不一样的值,对这些值求最大值

画个图可能更清晰

image.png

图上是大小为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;
}