前缀和数组

303. 区域和检索 - 数组不可变

304. 二维区域和检索 - 矩阵不可变

560. 和为 K 的子数组

 

如果要得到「区间和」,能想到最简单的方法就是遍历所求区间,循环相加即可。如果这种需求有很多,此时,时间复杂度为 O(n2)

基于上面描述的场景,我们完全可以使用「前缀和」优化,前缀和数组中每个元素的值为区间[0..i]的元素和

注意:前缀和适用于不变数组;对于变化的数组,可以使用「线段树」,关于线段树的详细介绍可见 线段树详解

区域和检索 - 数组不可变

题目详情可见 区域和检索 - 数组不可变

建议:preSum[]整体向后偏移一位,简便处理

12

如果求区间[2,4]的和,只需计算preSum[4 + 1] - preSum[2]即可

下面给出详细代码:

二维区域和检索 - 矩阵不可变

题目详情可见 二维区域和检索 - 矩阵不可变

13

如果求红色区间的和,只需求preSum[4,4] - preSum[1,4] - preSum[4,1] + preSum[1,1]即可

下面给出详细代码:

和为 K 的子数组

题目详情可见 和为 K 的子数组

借鉴「两数和」的思路,利用HashMap。下面给出详细代码: