目录
一.差分
1.什么是差分
差分的概念:有一列数字:如:a[0],a[1],a[2],.....a[n],它的每一项与前边一项进行相减的操作
例如差分数组:b[0]=a[0],b[1]=a[1]-a[0],b[2]=a[2]-a[1],.......,b[n]=a[n]-a[n-1] 类似于这样的操作就叫做差分
2.差分数组所解决的问题
差分数组主要用于解决:对某些不确定的区间多次进行加减操作时,如果每次都是对这些区间遍历操作,(设进行n次操作,每次对长度为m的数组进行操作),时间复杂度为O(nm),如果使用差分来进行解决的话,可以将时间复杂度变为O(n)
注意:差分只能够解决加减的问题,不能够解决乘除的问题
3.差分解题的步骤
1.构造差分数组: 数组为:a[0],a[1],a[2],.....a[n]
那么差分数组为:b[0]=a[0],b[1]=a[1]-a[0],b[2]=a[2]-a[1],.......,b[n]=a[n]-a[n-1]
2.进行相对应的加减操作(例如,需要对left到right个元素全部加x,b[left]+=x,b[right]-=x)
3.差分还原(进行求前缀和的操作)
a[0]=b[0], a[1]=b[1]+a[0],a[2]=a[1]+b[2]
4.举例差分解题
对于数组nums={1,2,4,6,7,9},将第2到第4个元素加3,第3到第5个元素减1,求操作后的数组
1.构造差分数组
diff[0]=nums[0]=1 diff[1]=nums[1]-nums[0]=1 diff[2]=nums[2]-nums[1]=2
diff[3]=nums[3]-nums[2]=2 diff[4]=nums[4]-nums[3]=1 diff[5]=nums[5]-nums[4]=2
diff={1,1,2,2,1,2}
2.进行相应操作<

文章介绍了差分数组的概念,用于解决区间多次加减操作的问题,降低时间复杂度。通过示例解释了差分的构造、操作步骤,并提供了两个应用实例:小明的彩灯问题和找出人口最多的年份。这两个问题都利用差分数组来高效计算结果。
704

被折叠的 条评论
为什么被折叠?



