扫地机器人--二分答案

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值