看到题目的觉得不过如此,九折?结果一跑就超时了,然后思考查找资料后,学到了一个新的东西,差分。
这里仅利用差分的思维概念,并未全靠差分!!!
我们先直接从题目出发,假设一个bookings[0]=[1,3,10]
初始化画图如下:
然后按照差分的逆过程进行叠加,result[i]=result[i]+result[i-1]。
最后结果如下
由上面的两个图可以看出,差分的逆过程叠加完美的解决了这个问题。
会有的同学会说,你现在只有一个booking,多个booking一起可能会没有这样的结果。
下面直接举例进一步说明:
bookings[0]=[1,3,10];bookings[1]=[2,4,5];bookings[2]=[1,5,15];
可以看出,由公式得出的结果完全符合题目要求。
个人的理解方法
首先我们想象一个数组在脑海中。
在booking给定的区间[l,r],我们将l位置上值赋为已经预订的数目book,用result[i]=result[i]+result[i-1]进行叠加就保证了l+1接收到已经预定的数目book。
我们是只需要从l到r区间(包含l、r)都叠加book,所以在r+1位置,初始化为-book。
这样保证了只在区间内的修改,而不影响每个booking区间外的修改。