Diff Array

Diff Array

Posted by Junyu on Sunday, November 8, 2020

In this blog, we will talk about one trick can be used to solve problems to do with frequent addition and subtraction to a subsection of an array - Diff Array.

Functionality

Todo with frequent addition and subtraction to a subsection of an array.

e.g. Given array arr, add 1 for elements between arr[0] and arr[3] inclusively, then, substract 3 for elements between arr[2] and arr[5] inclusively, what will be the final arr.

Trick

##Constracting a diff array

Diff array is an array recording the difference between two adjacent elements in arr, i.e. diffArr[i] = arr[i] - arr[i-1].

vector<int> diffArr(arr.size());
diffArr[0] = arr[0];
for (int i = 0; i < arr.size(); i++) {
  diffArr[i] = arr[i] - arr[i-1];
}

Recovering original array

To recover arr from diffArr, we are going to add elements in diffArr with previous elements (one element before) in arr.

vecotr<int> result(diffArr.size());
result[0] = diffArr[0];
for (int i = 1; i < diffArr.size(); i++) {
  result[i] = result[i-1]+diff[i];
}

Opearting a diff array

With method mentioned in previous section, to add or substract amount for elements between arr[a] and arr[b] inclusively, we just need diffArr[a] += amount and diffArr[b+1] -= amount.

Remember to check b+1 if it excesses the boundary of array,