题解:差分数组 前缀和 在区间两端操作,然后求前缀和
class Solution {
public:
vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
vector<int> result(n,0);
//遍历预定数组
for(auto x:bookings){
result[x[0]-1] += x[2];
if(x[1]<n){
//抵消后面加上的
result[x[1]] -= x[2];
}
}
//求前缀和
for(int i = 1;i<n;i++){
result[i]+=result[i-1];
}
return result;
}
};
在范围较大的区间内操作(同加同减)可使用差分数组,然后求前缀和得到修改后的数组,
//在区间[left,right]操作
result[left]+=操作数
result[right+1]-=操作数
//求前缀和得修改后的数组
for(int i = 1;i<n;i++){
result[i]+=result[i-1];
}