这是悦乐书的第235次更新,第248篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第102题(顺位题号是455)。有1000个水桶,其中只有一个水桶含有毒药,其余的都没毒。它们看起来都一样。如果猪喝了那桶带有毒药的水,它会在15分钟内死亡。你需要在一小时内找出哪个桶中含有毒药的最小猪量是多少。回答这个问题,并为后续一般案例编写算法。

跟进:如果有n桶水,猪喝了带毒的水会在m分钟内死亡,那么你需要在p分钟内使用多少只猪(x)找出“毒药”桶? 只有一个带毒药的桶。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

题目里面的三个参数,buckets表示水桶数量,minutesToDie表示小猪喝了有毒的水需要多少分钟死,minutesToTest表示有多少分钟用来测试。最后两个参数合起来理解就是可以测试的次数。比如小猪喝了有毒的水15分钟后死,有60分钟来测试,那么我们就可以测试4次。题目要求返回的是小猪的数量。我们先来看几个例子,找下规律。

情况1:测试次数为1次,有2只小猪,最多可以测试多少个水桶?

我们将4个水桶标记为1,2,3,4,小猪a喝1和2,小猪b喝2和3。15分钟后,如果小猪a死了,说明水桶1有毒;如果小猪b死了,说明水桶3有毒;如果小猪a和b都死了,说明第2桶水有毒;如果两只小猪都没有死,说明水桶4有毒。测试次数为1次,有两只小猪,可以测试4个水桶。

情况2:测试次数还是为2次,有2只小猪,最多可以测试多少个水桶?

1 2 3

4 5 6

7 8 9

使用数字1到9来标记水桶,第一只猪a第一次喝第1,2,3桶水,第二次喝4,5,6,;第二只猪b第一次喝1,4,7,第二次喝2,5,8。如果在第一次,a和b都死了,说明1有毒;如果a第一次死了,b在第二次死了,说明2有毒。如果继续往下观察,可能有毒的水桶其实就是一个坐标,也可以理解为一个二维数组。

如果继续往上延伸,测试次数为2次,3只猪时,最多可以测27桶水。因此,三者之间的关系满足m的x次方等于能测的桶数。而m则是可以测试的次数加1。反过来,就可以通过取对数获得x的值。

public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
int count = minutesToTest/minutesToDie + 1;
return (int)Math.ceil(Math.log((double)buckets)/Math.log((double)count));
}

03 小结

算法专题目前已日更超过三个月,算法题文章102+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Poor Pigs(Java实现)的更多相关文章

  1. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  3. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  4. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  5. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  6. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  7. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  8. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

  9. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

随机推荐

  1. ECMAScript5.1的运算符、类型转换总结

    一.运算符优先级 从高到低 运算符 说明 () 圆括号 . [] new(带参数列表) 字段访问.数组索引.new(带参数列表) () new(无参数列表) 函数调用,无参数列表 ++(后置递增) - ...

  2. GitLab 社区版 11.0.2用户管理教程

    Gitlab地址:http://xx.xx.xx.xx/users/sign_in 登录之后,主界面 右上角功能按钮,分别为管理区域.新建.问题.合并请求.待办事件.个人设置 选择管理区域按钮 可以根 ...

  3. 『Power Hungry Cows A*启发式搜索』

    Power Hungry Cows(POJ 1945) Description FJ的奶牛想要快速计算整数P的幂 (1 <= P <=20,000),它们需要你的帮助.因为计算极大数的幂, ...

  4. Dubbo(二) —— dubbo配置

      一.配置原则 JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口. XML 次之,如果在 XML 中有配置,则 dubbo.properties ...

  5. 抓包工具Charles的使用教程

    参考:https://zhubangbang.com/charlesproxy 如果您是您一次使用Charles,可能对下面的感兴趣. Charles破解版免费下载和安装教程 Charles手机抓包设 ...

  6. 【Python3爬虫】网易云音乐歌单下载

    一.目标: 下载网易云音乐热门歌单 二.用到的模块: requests,multiprocessing,re. 三.步骤: (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后 ...

  7. leetcode — longest-consecutive-sequence

    import java.util.HashSet; import java.util.Set; /** * Source : https://oj.leetcode.com/problems/long ...

  8. 【细语】C#之扩展方法原理及其使用

    1.写在前面 今天群里一个小伙伴问了这样一个问题,扩展方法与实例方法的执行顺序是什么样子的,谁先谁后(这个问题会在文章结尾回答).所以写了这边文章,力图从原理角度解释扩展方法及其使用. 以下为主要内容 ...

  9. JS引擎线程的执行过程的三个阶段(二)

    继续JS引擎线程的执行过程的三个阶段(一) 内容, 如下: 三. 执行阶段 1. 网页的线程 永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS引 ...

  10. Perl线程池

    Thread::Pool模块提供了Perl解释器线程的线程池,手册:https://metacpan.org/pod/Thread::Pool.