370. Range Addition
题目链接:https://leetcode.com/problems...
这道题暴力法是可以的,每次把所有在start到end之间的值都更新一遍,不过题目要求要O(k+n),所以其实每次更新只能用constant的时间。有点像prefix sum的意思,每次只更新第一个值,最后把值加起来,最后怎么确定结束的地方呢?没法知道在哪结束,但是可能让结束之后的地方恢复原来的值,所以要在[end+1]的方法更新成负值,这样结束之后就抵消了。如果结束的地方就在array末尾,那就不更新。
public class Solution {
public int[] getModifiedArray(int length, int[][] updates) {
int[] result = new int[length];
// only update start and end + 1
for(int[] update : updates) {
result[update[0]] += update[2];
if(update[1] < length - 1) result[update[1] + 1] -= update[2];
}
// calculate prefix sum
int prefix = 0;
for(int i = 0; i < result.length; i++) {
result[i] += prefix;
prefix = result[i];
}
return result;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。