1. 程式人生 > >【LeetCode】307. 區域和檢索

【LeetCode】307. 區域和檢索

1.題目

給定一個整數陣列 nums,求出陣列從索引 i 到 j (i ≤ j) 範圍內元素的總和,包含 i, j 兩點。

update(i, val) 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。

2.思路

在上題的基礎上,增加update函式,用於更新數值;
先求出nums[i]=num[i+1]-num[i];
求出val與nums[i]的差值den;
在後續陣列num中依次增加den即可。

3.程式碼

class NumArray {
public:
    vector<int>num;
    NumArray(vector<
int>
nums) { num.resize(nums.size()+1,0); num[0]=0; for(int i=0;i<nums.size();i++){ num[i+1]=nums[i]+num[i]; } } void update(int i, int val) { int den=val-(num[i+1]-num[i]); cout<<den<<endl; for(i++;i<num.
size();i++) num[i]+=den; } int sumRange(int i, int j) { return num[j+1]-num[i]; } }; /** * 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); */