我们有一个长度为n的数组。
我们的前缀和就是把这个原数组中的若干个元素进行累加计算。
这里有个重要的点就是下标一定要从1开始。
我们第一个问题就是如何去求我们的si:
我们的前i项和的求法是前i-1项的和加上第i个元素。
这里有个边界就是我们的s0要定义成0.
它的作用是能求出y一个数组中任意一段数的和:
比如我们可以求出一个数组中l-r区间段的和。
这基本是咱们前缀和唯一的应用。
s0=0是因为一个边界值的问题,我们求s10的时候因为想求任何一段都用同一个公式,所以会涉及到s10-s0.
我们现在来看一个具体的应用:
整个流程的时间复杂度是O(n),每次询问的时间复杂度是O(1)
然后我们现在来用Java代码给它去实现一下:
这个题它的思想不算难,代码也不算多,我们是不需要记什么模板的,就学会就行: