> For the complete documentation index, see [llms.txt](https://protegejj.gitbook.io/algorithm-practice/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://protegejj.gitbook.io/algorithm-practice/leetcode/dynamic-programming/303-range-sum-query-immutable.md).

# 303     Range Sum Query - Immutable

## 303. [Range Sum Query - Immutable](https://leetcode.com/problems/range-sum-query-immutable/description/)

## 1. Question

Given an integer arraynums, find the sum of the elements between indicesiandj(i≤j), inclusive.

**Example:**

```
Given nums = [-2, 0, 3, -5, 2, -1]

sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
```

**Note:**

1. You may assume that the array does not change.
2. There are many calls to sumRange function.

## 2. Implementation

**(1) DP**

```java
class NumArray {
    int prefixSum[];
    public NumArray(int[] nums) {
        int n = nums.length;
        prefixSum = new int[n + 1];

        for (int i = 1; i <= n; i++) {
            prefixSum[i] = prefixSum[i - 1] + nums[i - 1];
        }
    }

    public int sumRange(int i, int j) {
        return prefixSum[j + 1] - prefixSum[i];
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(i,j);
 */
```

## 3. Time & Space Complexity

**DP:** 时间复杂度: NumArray(): O(n), sumRange(): O(1), 空间复杂度O(n)
