一维数组求区间和:
preSum 方法能快速计算指定区间段 【i,j】的元素之和。它的计算方法是从左向右遍历数组,当遍历到数组的i位置时,preSum 表示 i 位置左边的元素之和。
算法思路:
1.设原数组nums大小为N,定义一个大小为N+1的数组preum,preSum[i] 表示该元素左边所有元素之和(不包含 i 元素)。遍历原数组,利用 preSum[i + 1] = nums[i] + preSum[i]
每次对nums数组的[0,j)范围求和,赋值给presum[i]。
2.利用 sum(i, j) = preSum[j + 1] - preSum[i] 快速求区间和。
定义N+1大小的presum数组是因为,可以方便地求区间和,不需要对i=0的特殊情况进行处理。
构造时时间复杂度和空间复杂度都是O(n),查询O(n)。
二维矩阵版:
同样的思路,不同的是
1.presum数组的推导方式,利用:
preSum[i+1][j+1] = preSum[i][j+1]+preSum[i+1][j]−preSum[i][j]+matrix[i][j]
2.求任意子矩阵的和:
sum([row1,col1]~[row2,col2]) = preSum[row2+1][col2+1]−preSum[row2+1][col1]−preSum[row1][col2+1]+preSum[row1][col1]
同样利用了 加一 的方法避免对特殊情况进行处理。