差分数组合并区间
给你一个下标从 0 开始的二维整数数组 nums
表示汽车停放在数轴上的坐标。对于任意下标 i
,nums[i] = [starti, endi]
,其中 starti
是第 i
辆车的起点,endi
是第 i
辆车的终点。
返回数轴上被车 任意部分 覆盖的整数点的数目。
示例 1:
1 |
|
示例 2:
1 |
|
在方法一中,对于每一辆汽车我们都需要 O(C) 的时间更新数组count。注意到我们一定是对数组 count 的连续一段增加一个相同的值 1,因此可以使用差分的思想优化时间复杂度。
具体地,我们令数组 diff 中的每个元素是数组 count 中相邻两个元素的差值,即:
diff[i]={count[i],count[i]−count[i−1],ifi=0ifi>0
如果我们维护数组 diff,那么 count[i] 可以通过从 diff[0] 累加到 diff[i] 方便地求出。
当我们需要将数组 count 中下标从 x 到 y 的元素均增加 1 时,对应到数组 diff,只需要将 diff[x] 增加 1,并将 diff[y+1] 减少 1,时间复杂度从 O(C) 降低至 O(1)。
最后只需要对数组 diff 求一遍前缀和,就还原出了数组 count,其中非零元素的数量即为答案。
1 |
|