题目
- 通过差分数组,只需要遍历一次即能求得每个位置的累加情况
- 差分其实就是前缀和的逆运算
- 假设一开始为 [0,0,0,0],对于[0,3,3]0到3范围上每个位置+3,[3,3,3,3,0]转换成差分数组[3,0,0,0,-3],每个位置累加之前的位置即能还原
- 对于[1,2,2],对于1到2范围每个位置+2,转换成差分数组[3,2,0,-2,0,-3],按照累加和还原[3,5,5,3,3,0]
function process(arr) {
// 航班从 1 开始
const preSum = Array(arr.length + 2).fill(0);
for (let i = 0; i < arr.length; i++) {
const temp = arr[i];
preSum[temp[0]] = temp[2];
preSum[temp[1] + 1] = -temp[2];
}
const res = [];
for (let i = 1; i <= preSum.length - 2; i++) {
res[i] = res[i] + res[i - 1];
}
return res.slice(1, arr.length + 1);
}