前缀和是什么
目前看到的题目里面,前缀和比较常出现在区间和相关的题目里面,比如一维数组中求满足连续子数组和为固定值的区段,或者二维数组中求区域面积和。
虽然暴力算法通常也能时间换智力把题算出来,但这违背算法的初衷,前缀和可以通过O(n)的时间复杂度,提供O(1) 时间复杂度获取结果的能力。
最简单的前缀和例题:leetCode1480
这道题的核心就是:
preSum[i] = num[i]+preSum[i-1]
其中preSum就是前缀和数组,preSum中的下标为i的数字就是nums中前i个数字之和。
然后代码就很容易给出来
1 |
|
单独解释一句下标0为啥要单独处理,因为不单独处理会出现num[0-1]。
能解决这个问题,就能大致了解前缀和是什么了。
前缀和的构成和使用
前缀和的构成核心就是:
1 |
|
例题
入门
参照上面的1480就可以了
一维数组 LeetCode303
1 |
|
二维数据(矩阵) LeetCode304
需要注意的是:
对于二维数组,前缀和变成二维之后,每个点代表以当前点为右下角的矩形内数字和。
也就是对于preSum[5][5]中的preSum[3][3],3,3这个点代表左上角3*3的范围内所有数字的和。
1 |
|