[LeetCode] 303. Range Sum Query - Immutable
Given an integer array nums, find the sum of the elements between indices i and j (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:
- You may assume that the array does not change.
- There are many calls to sumRange function.
Thought process:
Use prefix sum (DP): sum(i, j) = prefixSum(j) - prefixSum(i - 1).
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class NumArray { private int[] prefixSum; public NumArray(int[] nums) { prefixSum = new int[nums.length + 1]; for (int i = 1; i < prefixSum.length; 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); */ |
Time complexity:
- Constructor(): O(n).
- sumRange(): O(1).
Comments
Post a Comment