-
Notifications
You must be signed in to change notification settings - Fork 154
/
range-addition.js
63 lines (57 loc) · 1.24 KB
/
range-addition.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* Range Addition
*
* 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 ]
*/
/**
* @param {number} length
* @param {number[][]} updates
* @return {number[]}
*/
const getModifiedArray = (length, updates) => {
const result = Array(length).fill(0);
for (let [start, end, val] of updates) {
result[start] += val;
if (end + 1 < length) {
result[end + 1] -= val;
}
}
for (let i = 1; i < length; i++) {
result[i] += result[i - 1];
}
return result;
};
export { getModifiedArray };