前缀和与差分

前缀和与差分

        简单明了的区间有限次操作,区间加减上的亲密两兄弟。

        前缀和书面意思就是前缀相加的和,如一个序列为{1,3,5,7,6,4,8},其前缀和的计算为每一项为前n项相加的和第一项的值就是本身,第二项的值是第一项加第二的和也就是1+3等于4,以此类推,我们便可以得到原数组的前缀数组就是{1,4,9,16,22,26,34}。

        那么我们知道了前缀和的定义,他到底能做些什么事情呢?

        举一个最简单的栗子,我们有n此操作,每次都要求L到R区间内的和,那么对于还没有了解到前缀和的我们会怎么做呢?

        首先有n此操作,一个循环从1到n,L到R的区间和,第二个循环从L到R进行累加。n此操作的时间复杂度就是O(n * m);

        有了前缀和,我们可以进行的操作就是用R下标表示的前缀和数组数值减去L下标的前缀和数组数值,就得到了区间和,那么也就是求区间和的时间复杂度就是O(1);

        差分数组 是计算数组的差,其表示方式就是用数组后一元素来减去数组的前一个元素所得到的值放入数组,这个过程就是差分。
        拿上一个的数组来说原数组是{1,3,5,7,6,4,8},进行差分后的结果就是{1,2,3,4,-1,-2,4}
        同样我们进行n此操作使L到R区间的数进行+x运算,双重for是最经典的做法,有了差分我们就可以在差分数组中的第L个元素进行+x,使R+1的位置元素进行减一,使O(n * m)的时间复杂度变为了O(1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值