Range Addition

medium difference array prefix sum

Problem

Apply k range updates of the form [start, end, val] to a length-n array initialized to 0; return the final array.

Inputlength = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]]
Output[-2,0,3,5,3]
Each update is O(1) into a difference array; one prefix sum produces the result.

def get_modified_array(length, updates):
    diff = [0]*(length + 1)
    for s, e, v in updates:
        diff[s] += v
        diff[e + 1] -= v
    out = []
    cur = 0
    for i in range(length):
        cur += diff[i]
        out.append(cur)
    return out
function getModifiedArray(length, updates) {
  const diff = new Array(length + 1).fill(0);
  for (const [s, e, v] of updates) { diff[s] += v; diff[e + 1] -= v; }
  const out = []; let cur = 0;
  for (let i = 0; i < length; i++) { cur += diff[i]; out.push(cur); }
  return out;
}
class Solution {
    public int[] getModifiedArray(int length, int[][] updates) {
        int[] diff = new int[length + 1];
        for (int[] u : updates) { diff[u[0]] += u[2]; diff[u[1] + 1] -= u[2]; }
        int[] out = new int[length]; int cur = 0;
        for (int i = 0; i < length; i++) { cur += diff[i]; out[i] = cur; }
        return out;
    }
}
vector getModifiedArray(int length, vector>& updates) {
    vector diff(length + 1, 0);
    for (auto& u : updates) { diff[u[0]] += u[2]; diff[u[1] + 1] -= u[2]; }
    vector out(length, 0); int cur = 0;
    for (int i = 0; i < length; i++) { cur += diff[i]; out[i] = cur; }
    return out;
}
Time: O(n + k) Space: O(n)