Post

LeetCode - 差分数组技巧

What

差分数组技巧可以算是前缀和技巧的变体,其不统计从起止位置到目前元组的sum,而是统计当前元素相较于前一个元素的偏移量diff

例如一个数组 nums [1,2,3,4]
其对应的差分数组为 diff [1,1,1,1]

一般将差分数组的首个元素初始化为原数组中的数据。

对于一个nums,可以直接构造一个diff,同样的对于一个给定的diff数组,我们可以将其还原为nums。

Why

preSum用于快速计算区间和,而使用diff数组可以快速对区间中的值进行统一操作。

例如对于区间[i,j]我们想做一个 + 1 操作,那么只需要修改diff[i]+=1; diff[j+1]-=1,然后以更新后的diff[]还原为新的nums即可

具体来说,结合diff[]还原为nums[]的逻辑,diff[i] += 1 意味着给 nums[i..] 所有的元素都加了 1,然后 diff[j+1] -= 1 又意味着对于 nums[j+1..] 所有元素再减 1,这样综合起来,就对 nums[i..j] 中的所有元素都加 1 了

一些题目

L370 区间加法

直白的差分数组实现

L1109 航班预定

需要翻译的差分数组题目

L1094 拼车

需要翻译的差分数组题目

This post is licensed under CC BY 4.0 by the author.