You are given an integer length
and an array updates
where updates[i] = [startIdxi, endIdxi, inci]
.
You have an array arr
of length length
with all zeros, and you have some operation to apply on arr
. In the ith
operation, you should increment all the elements arr[startIdxi], arr[startIdxi + 1], ..., arr[endIdxi]
by inci
.
Return arr
after applying all the updates
.
Example 1:
Input: length = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]] Output: [-2,0,3,5,3]
Example 2:
Input: length = 10, updates = [[2,4,6],[5,6,8],[1,9,-4]] Output: [0,-4,2,2,2,4,4,-4,-4,-4]
Constraints:
1 <= length <= 105
0 <= updates.length <= 104
0 <= startIdxi <= endIdxi < length
-1000 <= inci <= 1000
class Solution:
def getModifiedArray(self, length: int, updates: List[List[int]]) -> List[int]:
delta = [0] * length
for start, end, inc in updates:
delta[start] += inc
if end + 1 < length:
delta[end + 1] -= inc
for i in range(1, length):
delta[i] += delta[i - 1]
return delta
class Solution {
public int[] getModifiedArray(int length, int[][] updates) {
int[] delta = new int[length];
for (int[] e : updates) {
delta[e[0]] += e[2];
if (e[1] + 1 < length) {
delta[e[1] + 1] -= e[2];
}
}
for (int i = 1; i < length; ++i) {
delta[i] += delta[i - 1];
}
return delta;
}
}
class Solution {
public:
vector<int> getModifiedArray(int length, vector<vector<int>>& updates) {
vector<int> delta(length);
for (auto e : updates) {
delta[e[0]] += e[2];
if (e[1] + 1 < length) delta[e[1] + 1] -= e[2];
}
for (int i = 1; i < length; ++i) delta[i] += delta[i - 1];
return delta;
}
};
func getModifiedArray(length int, updates [][]int) []int {
delta := make([]int, length)
for _, e := range updates {
delta[e[0]] += e[2]
if e[1]+1 < length {
delta[e[1]+1] -= e[2]
}
}
for i := 1; i < length; i++ {
delta[i] += delta[i-1]
}
return delta
}