1、原题如下:
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.
2、解题如下:
class NumArray {
public:
NumArray(vector<int> &nums) {
size=nums.size();
num=vector<int>(size+1,0);
sum=vector<int>(size+1,0);
for(int i=0;i<size;i++)
{
update(i,nums[i]);
}
}
void update(int i, int val) {
int old=num[i+1];
for(int j=i+1;j<=size;j+=(j&(-j)))
{
sum[j]=sum[j]-old+val;
}
num[i+1]=val;
}
int sumRange(int i, int j) {
return getSum(j+1)-getSum(i);
}
int getSum(int k){
int getsum=0;
for(int m=k;m>0;m-=(m&(-m)))
{
getsum+=sum[m];
}
return getsum;
}
private:
int size;
vector<int> sum;
vector<int> num;
};
3、总结
本题才用的树状数组进行的计算,可参考Binary Indexed Tree数据结构。