Range Sum Query - Immutable

easy prefix sum design

Problem

Design a data structure that supports repeated sumRange(l, r) queries returning sum(nums[l..r]) for an immutable array nums.

Inputnums = [-2,0,3,-5,2,-1]; sumRange(2,5)
Output-1
prefix = [0,-2,-2,1,-4,-2,-3]; pref[6] − pref[2] = -3 − (-2) = -1.

class NumArray:
    def __init__(self, nums):
        self.pref = [0]
        for x in nums:
            self.pref.append(self.pref[-1] + x)
    def sumRange(self, l, r):
        return self.pref[r + 1] - self.pref[l]
class NumArray {
  constructor(nums) {
    this.pref = [0];
    for (const x of nums) this.pref.push(this.pref[this.pref.length - 1] + x);
  }
  sumRange(l, r) { return this.pref[r + 1] - this.pref[l]; }
}
class NumArray {
    int[] pref;
    public NumArray(int[] nums) {
        pref = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) pref[i + 1] = pref[i] + nums[i];
    }
    public int sumRange(int l, int r) { return pref[r + 1] - pref[l]; }
}
class NumArray {
    vector pref;
public:
    NumArray(vector& nums) {
        pref.resize(nums.size() + 1, 0);
        for (int i = 0; i < (int)nums.size(); i++) pref[i + 1] = pref[i] + nums[i];
    }
    int sumRange(int l, int r) { return pref[r + 1] - pref[l]; }
};
Time: O(n) build, O(1) query Space: O(n)