303. Range Sum Query - Immutable¶ Time: $O(n)$ Space: $O(n)$ C++JavaPython 1 2 3 4 5 6 7 8 9 10 11 12 13class NumArray { public: NumArray(vector<int>& nums) : prefix(nums.size() + 1) { partial_sum(nums.begin(), nums.end(), prefix.begin() + 1); } int sumRange(int left, int right) { return prefix[right + 1] - prefix[left]; } private: vector<int> prefix; }; 1 2 3 4 5 6 7 8 9 10 11 12 13class NumArray { public NumArray(int[] nums) { prefix = new int[nums.length + 1]; for (int i = 0; i < nums.length; ++i) prefix[i + 1] = nums[i] + prefix[i]; } public int sumRange(int left, int right) { return prefix[right + 1] - prefix[left]; } private int[] prefix; } 1 2 3 4 5 6class NumArray: def __init__(self, nums: list[int]): self.prefix = list(itertools.accumulate(nums, initial=0)) def sumRange(self, left: int, right: int) -> int: return self.prefix[right + 1] - self.prefix[left]