一开始拿到这道题没有什么头绪。综合各路大佬题解,一下子豁然开朗。
题眼:每一段感受器都感受到水的最早时间。由于整个管道,分为多个段,每个段都有一个感受器。所以题眼翻译为:覆盖满整条管道,所需要的最短时间。
即:最大值最小问题——采用二分法。
思路:用二分法取时间,然后使用区间覆盖的方法来判断是否在该时刻能够覆盖满整条管道。
拿题目测试数据作为例子。
管道长度为10,设有3个阀门,位置分别为1,6,10;开阀时间分别为1,5,2。
最短时刻取0,最长时刻取2*10(为了方便演示,就不取2倍管道最大长度了。这是易错点,解释一下为什么取2倍管道最大长度,而不取1倍管道最大长度:假设有一个管道长为1e9,仅有一个阀门,阀门位于最右侧10e9的位置,且开阀时间取到最晚为1e9。那么覆盖完整个管道,所需时间就是2*1e9。)。mid = 10,阀门1的覆盖区间为[1-(10-1),1+(10-1)],即[1,10]