245.區(qū)域和檢索 - 數組可修改

給定一個整數數組 nums,求出數組從索引 i 到 j (i ≤ j) 范圍內元素的總和,包含 i, j 兩點。
update(i, val) 函數可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。

示例:

Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8
說明:
數組僅可以在 update 函數下進行修改。
你可以假設 update 函數與 sumRange 函數的調用次數是均勻分布的。

代碼

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;
};
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,993評論 0 2
  • 動態(tài)規(guī)劃 111. 爬樓梯思路類似斐波那契數列注意考慮第 0 階的特殊情況 272. 爬樓梯 II思路類似上題,只...
    6默默Welsh閱讀 2,600評論 0 1
  • 一次意外,在簡書看到這幅畫的教程,非常喜歡就動手畫了下來。后續(xù)還有,希望自己堅持下去。
    紅筏著意寫閱讀 158評論 0 0
  • 阿佳已經單身很久了,久到她和閨蜜一起吃飯,大家都習慣了她一個人來一個人走。阿佳自己倒是不著急找男朋友,可是架不住家...
    一杯甜酒閱讀 1,113評論 16 10
  • 現在是2017年12月31日晚上9點一刻。 我以時間開頭寫文章還是頭一回,這一次,我知道自己到底想寫什么。 明天就...
    南宮玥貍閱讀 294評論 5 3

友情鏈接更多精彩內容