LeetCode刷题370:区间加法
假设有一个长度为 n 的数组,初始情况下所有的数字均为 0,你将会被给出 k 个更新的操作。
其中,每个操作会被表示为一个三元组:[startIndex, endIndex, inc],
你需要将子数组 A[startIndex ... endIndex](包括 startIndex 和 endIndex)增加 inc。
请你返回 k 次操作后的数组。
思路分析:
1.使用差分数组的解题技巧
2.差分数组:主要适用场景是频繁对原始数组的某个区间的元素进行增减;类似于前缀和构造的prefix数组,我们构造一个差分数组diff。
diff[i] = nums[i] - nums[i - 1]
3.示意图:

4.运用差分数组进行区间增删的操作(重点理解)
差分数组其实就是增加量,若对原始数组nums[i…j]增(删) value :
则 diff[i] += value, 即nums[i…]增加了value
之后 diff[j+1] -= value,即对nums[j…]减少了value,综合起来就是没有变化
例:原始数组nums[5] = {1,2,3,4,5}; 则差分数组diff[5] = {1,1,1,1,1};
假设有操作[1,3,1], 下标1开始到下标3结束的值全加1
对差分数组:diff[1] += 1(value),
即原始数组nums[1…](nums[1],nums[2],nums[3],nums[4])增加了1.
对差分数组:diff[3+1] -= 1(value),即对nums[4]减少了value,减去了超出结束下标的增加值,只保留了区间范围内的增加。
5.返回结果数组
根据差分数组构造结果数组
result:result[0] = diff[0];
result[i] = result[i - 1] + diff[i]