Assume you have an array of length n initialized with all 0's and are given k update operations.
Each operation is represented as a triplet: [startIndex, endIndex, inc] which increments each element of subarray A[startIndex ... endIndex] (startIndex and endIndex inclusive) with inc.
Return the modified array after all k operations were executed.
Example:
Given: length = 5, updates = [ [1, 3, 2], [2, 4, 3], [0, 2, -2] ] Output: [-2, 0, 3, 5, 3]
Explanation:
Initial state: [ 0, 0, 0, 0, 0 ] After applying operation [1, 3, 2]: [ 0, 2, 2, 2, 0 ] After applying operation [2, 4, 3]: [ 0, 2, 5, 5, 3 ] After applying operation [0, 2, -2]: [-2, 0, 3, 5, 3 ]这道题是比较常用的区间相加的问题,很像Airbnb的meeting time问题,只在区间的头+val,在区间的尾-val,然后累加,那么每一个区间内的值都加上了头的value,每一个区间后的值都减去了头的value。
class Solution {
public:
vector<int> getModifiedArray(int length, vector<vector<int>>& updates) {
vector<int> res(length, 0);
for (auto op : updates) {
int left = op[0], right = op[1], val = op[2];
res[left] += val;
if (right + 1 < length)
res[right+1] -= val;
}
for (int i = 1; i < length; i++) {
res[i] += res[i-1];
}
return res;
}
};