在类的构造函数中给一个整数数组, 实现两个方法 query(start, end)
和 modify(index, value)
:
- 对于 query(start, end), 返回数组中下标 start 到 end 的 和。
- 对于 modify(index, value), 修改数组中下标为 index 上的数为 value.
样例
样例1
输入:
[1,2,7,8,5]
[query(0,2),modify(0,4),query(0,1),modify(2,1),query(2,4)]
输出: [10,6,14]
说明:
给定数组 A = [1,2,7,8,5].
在query(0, 2)后, 1 + 2 + 7 = 10,
在modify(0, 4)后, 将 A[0] 修改为 4, A = [4,2,7,8,5].
在query(0, 1)后, 4 + 2 = 6.
在modify(2, 1)后, 将 A[2] 修改为 1,A = [4,2,1,8,5].
After query(2, 4), 1 + 8 + 5 = 14.
样例2
输入:
[1,2,3,4,5]
[query(0,0),query(1,2),quert(3,4)]
输出: [1,5,9]
说明:
1 = 1
2 + 3 = 5
4 + 5 = 9
挑战
query
和 modify
的时间复杂度需要为O(logN).
注意事项
在做此题前,建议先完成以下三题:
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution {
public:
/* you may need to use some attributes here */
/*
* @param A: An integer array
*/
vector<int> nums;
vector<long long> sum;
Solution(vector<int> A) {
// do intialization if necessary
nums = A;
sum.resize(A.size()+1);
for(int i = 0; i < sum.size(); i++)
{
if(i == 0)
sum[i] = 0;
else
{
sum[i] = sum[i-1] + A[i-1];
}
}
}
/*
* @param start: An integer
* @param end: An integer
* @return: The sum from start to end
*/
long long query(int start, int end) {
// write your code here
return sum[end+1] - sum[start];
}
/*
* @param index: An integer
* @param value: An integer
* @return: nothing
*/
void modify(int index, int value)
{
// write your code here
int chazhi = value - nums[index];
nums[index] = value;
for(int i = index+1; i < sum.size(); i++)
{
sum[i] = sum[i] + chazhi;
}
}
};