刷
June-17-2019
第一反应是线段树。
第二反应是我他妈是个傻逼吧,跟线段树有什么关系。
比较直观的做法就是每个都扫一下,然后按部就班+-。
另一个做法,update[i]代表从i开始往后都要+几,比如
[1, 3 ,1]可以标记为update[1] = 1, update[4] = -1,代表1之后要+1,直到加到3为止,所以3后面要减去1,很巧妙。希望能从interval的题里找到相似的应用。
public int[] getModifiedArray(int length, int[][] updates) {
int[] changing = new int[length];
for (int[] update : updates) {
changing[update[0]] += update[2];
if (update[1] < length - 1) changing[update[1] + 1] -= update[2];
}
int increment = 0;
for (int i = 0; i < length; i ++) {
increment += changing[i];
changing[i] = increment;
}
return changing;
}