差分的应用

差分的结果反映了离散量之间的一种变化

对于一个数组每次给你一对L和R让你依次对L到R之间的数进行加上k的操作求最后的数组;

这时候我们只要用一个等大的数组a[i]来记录数组见两个元素的差值

维护这个区间的左端点(L)和右端点的下一个位置(R)就可以维护这个要操作的区间,使要操作的区间加k(具体见下).

这个操作并不是广义上的每个数进行,而是通过这区间的两个位置的变化加上前缀和操作完成。

*************************************************************************************************************

对区间操作的时候

我们可以考虑将对区间的操作转化为对区间端点的操作

如果不行就可以把对一个大区间的操作转化为对几个小区间的操作

最坏的情况是对区间进行遍历

*************************************************************************************************************

由以上

我们考虑在区间加数的过程中有什么值是在区间端点发生了变化而在区间内是没有发生变化的

我们发现差值满足这个条件于是我们可以来维护这个差值数组对差值数组进行储存

所以我们可以用数组a[i]来维护第i个数和其前一个数的差值(可以默认的第一个数前面有一个0)此操作可以让a[1]=要进行操作的数组的第一个元素,然后当需要[L,R]之间的每一个数+k时,只需要修改a[L]和a[R+1]即可。

在所有的修改操作进行完之后,我们再对a[i]求一个前缀和,就可以得到数列中每个元素的值了。

对于为什么将a[R+1]处进行加一操作是因为原数组下标时R的地方的值变化了而R+1的地方数组没发生改变。

用a[i]来维护第i个数和其前一个数的差值的办法就叫做差分

---------------------------------------------------------------------------------------------------------------------------------差分和前缀和是一对对称的操作(即对差分数组求前缀和就是原数组,对前缀和求差分也会得到原数组)

---------------------------------------------------------------------------------------------------------------------------------第一次写博客,勿喷,如果有什么错误或者更好的理解欢迎评论区留言,看到了的话一定会回。

欢迎各位大佬一起交流。

你可能感兴趣的:(基础算法,算法,leetcode,贪心算法)