区间加法
[startIndex, endIndex, inc]
示例:
输入: length = 5, updates = [1,3,2],[2,4,3],[0,2,-2](/post/anmOAq5K.html#1,3,2],[2,4,3],[0,2,-2)
输出: [-2,0,3,5,3]
---------------------------------------------------------------
解释:
初始状态:
[0,0,0,0,0]
进行了操作 [1,3,2] 后的状态:
[0,2,2,2,0]
进行了操作 [2,4,3] 后的状态:
[0,2,5,5,3]
进行了操作 [0,2,-2] 后的状态:
[-2,0,3,5,3]
- 使用 3. 差分数组 ,很快就能实现
- 注意:需要判断
j+1
是否越界
var getModifiedArray = function (length, updates) {
let n = length;
let arr = new Array(n).fill(0);
let diff = getDiff(arr);
for (let [i, j, inc] of updates) {
diff[i] += inc;
// 注意这里需要判断 j+1 是否越界
if (j + 1 < n) {
diff[j + 1] -= inc;
}
}
return restore(diff);
};
// 构造差分数组
function getDiff(nums) {
const diff = new Array(nums.length).fill(0);
diff[0] = nums[0];
for (let i = 1; i < nums.length; i++) {
diff[i] = nums[i] - nums[i - 1];
}
return diff;
}
// 从差分数组还原原始数组
function restore(diff) {
const res = new Array(diff.length).fill(0);
res[0] = diff[0];
for (let i = 1; i < diff.length; i++) {
res[i] = res[i - 1] + diff[i];
}
return res;
}