307 Range Sum Query - Mutable

Posted lina2014

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了307 Range Sum Query - Mutable相关的知识,希望对你有一定的参考价值。

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
The update(i, val) function modifies nums by updating the element at index i to val.
Example:
Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8
Note:
    The array is only modifiable by the update function.
    You may assume the number of calls to update and sumRange function is distributed evenly.
详见:https://leetcode.com/problems/range-sum-query-mutable/description/

C++:

class NumArray {
public:
    NumArray(vector<int> nums) {
        num.resize(nums.size()+1);
        bit.resize(nums.size()+1);
        for(int i=0;i<nums.size();++i)
        {
            update(i,nums[i]);
        }
    }
    
    void update(int i, int val) {
        int diff=val-num[i+1];
        for(int j=i+1;j<num.size();j+=(j&-j))
        {
            bit[j]+=diff;
        }
        num[i+1]=val;
    }
    
    int sumRange(int i, int j) {
        return getSum(j+1)-getSum(i);
    }
    
    int getSum(int i)
    {
        int res=0;
        for(int j=i;j>0;j-=(j&-j))
        {
            res+=bit[j];
        }
        return res;
    }
    
private:
    vector<int> num;
    vector<int> bit;
};

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

 参考:https://www.cnblogs.com/grandyang/p/4985506.html

以上是关于307 Range Sum Query - Mutable的主要内容,如果未能解决你的问题,请参考以下文章

307 Range Sum Query - Mutable

307. Range Sum Query - Mutable

Leetcode 307. Range Sum Query - Mutable

307. Range Sum Query - Mutable

LeetCode - 307. Range Sum Query - Mutable

307. Range Sum Query - Mutable查询求和的范围(可变)