class Solution(object): def getModifiedArray(self, length, updates): """ :type length: int :type updates: List[List[int]] :rtype: List[int] """ arr = [0 for i in range(length+1)] for lst in updates: arr[lst] += lst arr[lst+1] -= lst for i in range(1,len(arr)-1): arr[i] += arr[i-1] return arr[0:-1]
Consider the trick first, for the updates information, we continuously accumulate each inc to it's [start] position and -inc to it's [end+1] position. Then in the final step, we generate those element one after another by doing something like [current] + [current-1].
Well, maybe some can understand this procedure immediately, but I'm not one of them, took me some time: Imagine a hand write ToDo list, we have a few missions to do, and we only record when to start and when to end. Then after some days, we got the list finished. Now consider the day we have been through, when encounter a start time of a mission, from that day on, we do that mission everyday just like the day before until we meet the corresponding end time. Likewise, for other mission , we have exactly the same procedure and they are totally independent. When we have checked everything on that ToDo list, apparently we got all missions finished, which is corresponding to the status of our result after applying those updates in Range Addition Problem.
I hope this can be helpful to you.