第十一课-前缀和
参考:https://oi.wiki/basic/prefix-sum/
定义
前缀和可以简单理解为「数列的前 n 项的和」,是一种重要的预处理方式,能大大降低查询的时间复杂度。
计算前缀和
为什么需要前缀和?
场景一
- 有一个长度为n(n<=10000)的数组a,计算前k项和的时间复杂度是多少?
- 如果查询有m(m<=10^5)次,总时间复杂度是多少?
- 能不能优化?
场景二:快速计算区间和
对于区间(l,r),用s(l,r)表示区间(l,r)的所有元素和,用s(i)表示前i个数的和,下标都是从1开始。
- s(3,5)=s(5)-s(2)
- s(3,4)=s(4)-s(2)
我们可以得到下面的公式:s(l,r) = s(l)-s(r-1)
s(i)数组可以在O(n)的时间内算出来,所以有了s(i)数组后,我们可以在O(1)的时间内算出任意区间(l,r)元素的总和。
练习题
http://oj.oldmoon.cn/p/991 (这个题目用前缀和思路,拿到80分即为正确!) http://oj.oldmoon.cn/p/GESP240931
上一章
第十课-二维数组-练习 下一章
第十二课-二维前缀和