利用前缀数组算区间和
1.意义
算一个数组从 i 位到 l位的和 并且要大量算区间的和的时候,这个时候前缀函数就很有意义了。
sum[1,n] = a1+a2+…an
sum[1,m] = a1+a2+…an+…+am
m > n > 1
最笨的办法就这么算,但是发现中间有重复的步骤。
利用前缀函数可以去除重复的步骤来提升速度。
算sum[n,m] = sum[1,m]-sum[1,n-1]
什么是前缀函数呢?
原数组:[a1,a2,a3,a4]
原数组的前缀数组:[0,sum[1,1],sum[1,2],sum[1,3],sum[1,4]]
代码的方式实现
主要利用 sum[1,m] = sum[1,m-1]+am
public int[] getHeadArray(int[] a) {
int length = a.length;
int[] b = new int[length + 1];
b[0] = 0;
for (int k = 0; k < length; k++) {
b[k + 1] = b[k] + a[k];
}
return b;
}