(ACWing yxc算法基础课笔记)差分

本文探讨了如何利用前缀和和差分数组的特性,通过O(1)时间复杂度高效地对数组的特定区间进行增减操作。通过实例和Java代码演示,展示了差分数组在处理区间修改任务中的应用和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们可以通过这个图看到我们的前缀和和这个差分实际上是一个互逆的过程。

我们假如想给所有的A数组中元素都加C。需要O(n)的时间复杂度。

但是如果我们把A数组中想加C的区间l,r在B数组的同样区间中加C,r 然后在r+1后面的区间每个B元素都-C。这样因为A是B的前缀和。所以也能完成同样的事情。但是这里的B只是给bl+C和b(r+1)-C。只是加了一个数和减去一个数,时间复杂度为O(1)。

所以我们差分的作用就显现出来了。

我们来看一下例题:

我们看看我们的java代码怎么去写这个题:

对了之前的差分还要补充一点,原数组a1......an可以看成是由一个长度为n,元素均为0的数组进行差分,每次加上对应元素形成的数组。

 

运行结果:

同样的:

如果我们想给一个数组a的一个区间内的每个元素都加上c也可以用之前的那种思想。

然后我们再来看一个题:差分矩阵

我们来看一下java代码怎么去写这个题:

运算结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值