1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public int[] getModifiedArray(int length, int[][] updates) { TreeMap<Integer, Integer> idxUpdate = new TreeMap<>(); for (int[] update : updates) { idxUpdate.put(update[0], idxUpdate.getOrDefault(update[0], 0) + update[2]); idxUpdate.put(update[1] + 1, idxUpdate.getOrDefault(update[1] + 1, 0) - update[2]); } int[] ans = new int[length]; int sum = 0; for (int i = 0; i < ans.length; i++) { sum += idxUpdate.getOrDefault(i, 0); ans[i] = sum; } return ans; } }
|
sum记录叠加的值. 我们在叠加开始的地方去标记以及叠加结束的地方去标记. 这样我们知道什么时候给sum加成, 什么时候给sum减去加成.
时间复杂度: O(n + k)
空间复杂度: O(n) 因为存答案需要一个数组.