您当前的位置: 首页 >  算法

PolarDay.

暂无认证

  • 6浏览

    0关注

    144博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

算法笔记——差分数组

PolarDay. 发布时间:2021-08-31 10:54:34 ,浏览量:6

差分数组 概念

所谓差分数组就是对数组的相邻元素求差保存到一个新的数组中,这个数组就是差分数组。 如下所示:

序号01234原数组a15343差分数组d14-21-1 作用

用于频繁的区间修改 区间修改是对数组的一段区间同时加上或减去某一个数 对上面的数组我们执行如下操作: 1.对区间[0,3]中的每个元素加3 2.对区间[1,2]中的每个元素减2 我们不难想到可以通过遍历区间中的每个元素来实现,但是如果区间很大,执行的操作很多时,这种方法很容易超时。这时就需要用到差分数组。

我们观察当我们对区间[0,3]中的每个元素进行加3操作时,差分数组只有d[0]和d[4]会发生变化。

序号01234原数组a48673差分数组d44-21-4

同理,对区间[1,2]执行减2操作时,只有d[1]和d[3]会发生变化。

序号01234原数组a46473差分数组d42-23-4

这就是差分数组所有的性质:当对区间[i,j]进行加减操作时,差分数组d[i]进行相同的操作,d[j+1]进行相反的操作。 利用差分数组的这个性质,我们对数组任意长度的区间修改不再需要遍历每个元素而只需要修改差分数组两个元素的值即可。 当进行完所有的区间操作后,对差分数组求一个前缀和即可得到原数组。 因为d[i]=a[i]-a[i-1],所以a[i]=a[i-1]+d[i],并且有a[0]=d[0],我们可以从前往后依次求出a[i]。

例题

LeetCode1109

参考代码

class Solution
{
public:
    vector corpFlightBookings(vector &bookings, int n)
    {
        vector d(n, 0);
        for (int i = 0; i             
关注
打赏
1659342973
查看更多评论
0.0873s