{LeetCode} 458. Poor Pigs

There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. They all look the same. If a pig drinks that poison it will die within 15 minutes. What is the minimum amount of pigs you need to figure out which bucket contains the poison within one hour.

Answer this question, and write an algorithm for the follow-up general case.

Follow-up:

If there are n buckets and a pig drinking poison will die within m minutes, how many pigs (x) you need to figure out the "poison" bucket within p minutes? There is exact one bucket with poison.


刚看到题的时候感觉好难啊,想着怎么组织排异组,因为以前看过经典的死囚试毒的问题是2瓶毒酒会有干扰,但是这题里只有一瓶,简单一些。

代码很简单,引用 MyPremiumAccount 的代码:(故标为转载)

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int t = (minutesToTest-1)/ minutesToDie + 1;
        if (buckets == 1) return 0;
        return log(buckets - 1) / log(t + 1) + 1;
    }
};

举例:1000, 15, 60

首先要知道,一只猪在总时间内最多喝几瓶酒,这里很好得到60/15 = 4

同一只猪就有了4个states, 第一瓶酒死,第二瓶酒死,第三瓶酒死,第四瓶酒死。

再加上到最后都不死,一只猪就可以表示5个状态了。

这就很像是5进制数得一位,而5^5 = 3125 < 1000,因此使用5只猪就可以将毒酒在1000瓶酒中找出来了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值