差分数组与前缀和数组

差分数组和前缀和是两种预处理技术,常用于处理大规模数组的区间修改和快速求和问题。差分数组在区间元素统一增减时效率高,而前缀和数组则能在O(1)时间内求得序列的连续子段和。当面对大数据量和多操作时,这两种方法能显著提升算法性能。
摘要由CSDN通过智能技术生成

都是一种预处理!!!!!!!!

1.差分数组

参考

从侧面来表示给定某一数组的变化,
一般用来对数组进行区间修改的操作

还是上面那个表里的栗子,我们需要进行以下操作:

1、将区间【1,4】的数值全部加上3

2、将区间【3,5】的数值全部减去5

很简单对吧,你可以进行枚举。
但是如果给你的数据量是1e5,
操作量1e5(10的5次方),
限时1000ms你暴力枚举能莽的过去吗?
T到你怀疑人生直接。

这时我们就需要使用到差分数组了。

d[i] = a[i] - a[i-1];

注意 只能是区间元素同时增加或减少相同的数的情况才能用
可以快速得到修改区间后的某个数字。

2.前缀和数组

参考

前缀和是一种预处理,可以降低时间复杂度,
可以在后面的计算中可以直接应用前面已经算出的结果.

sum[i] = a[i] + sum[i-1];

这个主要是应用于在O(1)时间内求一个序列和。
如给一个序列s,求s[i]+s[i+1]+s[i+2]+…s[n]。
算法十分简单,用数组sum[i]记录前n项序列s[i]的和

a[2] + a[3] +a[4] = s[4] - s[2-1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值