0307. Range Sum Query - Mutable
https://leetcode.com/problems/range-sum-query-mutable
Description
Given an integer array nums, handle multiple queries of the following types:
Update the value of an element in
nums.Calculate the sum of the elements of
numsbetween indicesleftandrightinclusive whereleft <= right.
Implement the NumArray class:
NumArray(int[] nums)Initializes the object with the integer arraynums.void update(int index, int val)Updates the value ofnums[index]to beval.int sumRange(int left, int right)Returns the sum of the elements ofnumsbetween indicesleftandrightinclusive (i.e.nums[left] + nums[left + 1] + ... + nums[right]).
Example 1:
**Input**
["NumArray", "sumRange", "update", "sumRange"]
[[[1, 3, 5]], [0, 2], [1, 2], [0, 2]]
**Output**
[null, 9, null, 8]
**Explanation**
NumArray numArray = new NumArray([1, 3, 5]);
numArray.sumRange(0, 2); // return 1 + 3 + 5 = 9
numArray.update(1, 2); // nums = [1, 2, 5]
numArray.sumRange(0, 2); // return 1 + 2 + 5 = 8Constraints:
1 <= nums.length <= 3 * 104-100 <= nums[i] <= 1000 <= index < nums.length-100 <= val <= 1000 <= left <= right < nums.lengthAt most
3 * 104calls will be made toupdateandsumRange.
ac1: Binary Indexed Tree
careful: bit.length = nums.length + 1; so need to do i++ in methods
ac2: Segment Tree
more intuitive, yet more code. Notice: use divide and conquer, no need to care about the mid point unless building the tree.
Last updated
Was this helpful?