差分数组

差分数组

1.问题背景

例如:我们现在有一个100000容量的数组,现在要求我们从索引i开始j结束,对于所有的元素进行+1操作。解决这个问题比较直观的一个解决方法是进行一个for循环从i开始j结束一次对过程中的每一个元素进行+1操作。但是如果我们要经常的对个数组进行连续空间的操作,这样是不是有点太费时间了,我们需要想到一个好的办法节省时间的开销。

2.解决方案

我们都知道,计算机解决优化时间复杂度的方法基本是都是通过增加空间的消耗来完成的。因此,我们将引出接下里的主角差分数组

3.差分构造

那么什么是差分数组,本质上这个也是一个数组,只是求差而已。我们引入下面的公式:
在这里插入图片描述
例如,我们可以看下面的数组:
在这里插入图片描述
然后根据公式构造他的差分数组:
在这里插入图片描述

4.应用

那么我们构造一个差分数组有什么用呢?仅仅为了浪费空间吗?存在即合理
差分数组可以很好的解决我们开始提出的问题,假如我们需要从索引i开始j结束,对于所有的元素进行+1操作,我们可以直接在差分数组的索引的i处+1然后在索引j+1处-1那我们就完成了我们需求的操作,只不过是我们的操作存到了差分数组中。在我们需要的时候,可以直接根据差分数组求出来索引处的值即可。
例如我们要对上图中 2-4的索引处+1,那么我们对2处的差分数组+1对5处的-1即可完成操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值