第一次见到这样的题型——似乎叫 二分答案
写个笔记,方便复习~
经过观察可以发现
一个机器人打扫所花费的时间=(他打扫的区域-1)*2
这个题目要求我们求出这些机器人打扫所花费的最少时间
由上面那个式子我们可以将所花费的最少时间转化为打扫的最小区域,最后再由最小区域得出最少时间。
直接求显然不太好做。
可以换个思路:这些机器人可以打扫很长的时间(打扫区域相互重叠),这样一定可以满足题目打扫完所有区域。如果在这个能满足的打扫区域条件再进行缩减。反之,不满足能够打扫完所有区域的条件对他进行扩大,那么最终得到的刚好能够满足题目的那个条件就是我们要求得的最值。
找范围的工作我们交给二分查找来做,而判断是否满足题目条件交给check来做。(把二分答案的做法理解为判定查值的过程)
做这种题个人认为最难的地方应该就是check比较难想。
这个题我们以打扫的范围是否可以>=给定打扫范围作为满足条件。所以一开始把打扫范围设置为0,然后在这个基础上累加。
也许中间可能会断开,也就是给的机器人打扫范围小了,以至于中间断开,肯定无法全部打扫,遇到这样的情况立刻返回false。
可以连接打扫的每一段有两种情况,一种是前面那个机器人打扫的区域已经超过了后面这个机器人所在的位置,那么这种情况,我们就不管后边那个范围,从当前这个打扫的机器人开始往后扫。另一种是前面那个区域还没有到后面这个机器人的位置,那么后边这个机器人就需要打扫前面的,从前面那个打扫到的区域边界开始往后扫。
代码后面再贴吧~
扫地机器人--二分答案
最新推荐文章于 2024-01-20 17:17:52 发布
本文介绍了一种解决机器人打扫区域最少时间问题的二分策略,通过转换问题为寻找最小打扫区域,利用二分查找确定范围,并通过check函数判断是否满足条件。难点在于设计高效的check函数来处理机器人打扫区域的连接和覆盖问题。
摘要由CSDN通过智能技术生成