毒酒问题binary search

有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠


老鼠按顺序排好每桶酒按照编号转换成二进制,给相应位置上是1的老鼠喝。最后按死掉的老鼠是哪几只,然后排成二进制,再转成十进制就是第几桶酒 1000转换成二进制是:1111101000, 共有十位,所以需10个


第一次见到会觉得很难想,但其实这是一种binary search的思想。一只老鼠负责喝1,3,5,7... 一只负责2,3 ,6,7, 10,11...,一只负责4,,5,6,7, 12,13,14,15...,这样如果是1024桶的话,那么每只老鼠就都喝了512桶酒。这样的话,其实即使不用2进制,只要你使用binary search的思想,比如第一只老鼠负责0-500,第二只负责0-250,500-750,第三只负责0-125,250-375,500-625,750-875.....这样依次下去,每一只都负责把之前测试的切割成一半,就可以解决。


如果变形一下,题目改成每只老鼠喝到毒酒就立刻死亡(即使少量也死亡),最少几只老鼠?


这样的话,同样的思想,其实就是最熟悉的binary search了,第一只把0-500的混合酒一口喝下,如果死了,第二只和0-250的混合酒,如果没死,喝500-750的混合酒...这样的话也是10只。

很多面试题都是这样,大同小异,只要你对关键思想很熟悉,很快就能找到这个模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值