基于滑动窗口算法计算k大小子数组和及算法有效性验证
代码有效性判断与分析
这段JavaScript代码属于有效的滑动窗口算法,但实现细节存在可优化空间,具体分析如下:
核心逻辑符合滑动窗口要求
滑动窗口算法的核心是复用前一个窗口的计算结果,仅通过调整窗口两端的元素得到新窗口的和,将时间复杂度从暴力法的O(n*k)优化为O(n)。这段代码完全遵循了该思路:
- 先计算第一个长度为k的子数组和,作为初始窗口值
currentSubArray; - 每次滑动窗口时,减去移出窗口的左侧元素
arr[i],加上新进入窗口的右侧元素arr[i+k],快速得到新窗口的和; - 累加所有窗口的和得到最终结果。
可优化的实现细节
代码中sum的累加逻辑存在冗余计算:
sum += currentSubArray - arr[i] + arr[i+k]; currentSubArray = currentSubArray - arr[i] + arr[i+k];
这里重复计算了currentSubArray - arr[i] + arr[i+k],可以优化为先更新currentSubArray,再将其累加到sum中,让代码更简洁高效:
currentSubArray = currentSubArray - arr[i] + arr[i+k]; sum += currentSubArray;
结果验证
对于输入数组[1,2,3,4,5]和k=3,所有长度为3的子数组和分别为6、9、12,总和为27,这段代码最终输出结果与预期一致。
内容的提问来源于stack exchange,提问作者Alekam
相关产品推荐
相关产品推荐

