LeetCode刷題370:區(qū)間加法
????假設有一個長度為 n 的數組,初始情況下所有的數字均為 0,你將會被給出 k 個更新的操作。
????其中,每個操作會被表示為一個三元組:[startIndex, endIndex, inc],
你需要將子數組 A[startIndex ... endIndex](包括 startIndex 和 endIndex)增加 inc。
????請你返回 k 次操作后的數組。
思路分析:
1.使用差分數組的解題技巧
2.差分數組:主要適用場景是頻繁對原始數組的某個區(qū)間的元素進行增減;類似于前綴和構造的prefix數組,我們構造一個差分數組diff。
????diff[i] = nums[i] - nums[i - 1]
3.示意圖:

4.運用差分數組進行區(qū)間增刪的操作(重點理解)
差分數組其實就是增加量,若對原始數組nums[i…j]增(刪) value :
則????diff[i] += value,????即nums[i…]增加了value
之后????diff[j+1] -= value,即對nums[j…]減少了value,綜合起來就是沒有變化
例:原始數組nums[5] = {1,2,3,4,5};????則差分數組diff[5] = {1,1,1,1,1};
假設有操作[1,3,1],????下標1開始到下標3結束的值全加1
對差分數組:diff[1] += 1(value),
?即原始數組nums[1…](nums[1],nums[2],nums[3],nums[4])增加了1.
對差分數組:diff[3+1] -= 1(value),即對nums[4]減少了value,減去了超出結束下標的增加值,只保留了區(qū)間范圍內的增加。
5.返回結果數組
根據差分數組構造結果數組????
????result:result[0] = diff[0];?
????result[i] = result[i - 1] + diff[i]