LeetCode算法题-Poor Pigs(Java实现)
这是悦乐书的第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实现)的更多相关文章
- LeetCode算法题-Heaters(Java实现)
这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...
- LeetCode算法题-Sqrt(Java实现)
这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
随机推荐
- Docker中运行EOS FOR MAC
基本要求以及依赖 安装 docker for mac ➡️ https://www.docker.com/products/docker-desktop docker需要7GB+内存.电脑右上角doc ...
- RAC集群数据库连库代码示例(jdbc thin方式,非oci)
1.RAC集群数据库连库代码示例(jdbc thin方式,非oci):jdbc.driverClassName=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc ...
- Owin学习笔记(一) Owin的前生今世
ASP.NET框架至今为止已经存在了数十年了,大量的网站使用ASP.NET框架进行开发.随着网站应用开发技术的进步, 许多网站应用开发框架有了新的流行趋势 轻量化 模块化 可移植 ASP.NET框架 ...
- Eureka中的核心概念
图片的链接出了一点小bug,导致图片不能正常访问,小伙伴们可以移步这里:https://mp.weixin.qq.com/s/kAqOTKUt_qPlxzI4aGS5Pw 本文是Spring Clou ...
- EF架构~FluentValidation实体检验与实体分离了
回到目录 在MVC,EF,LINQ环境里,我们经常会用到DataModel(DO)和ViewModel(VO),可能对于它们的属性校验我们会采用特性的方式,当然这很直观,就连微软的DEMO也是如些,一 ...
- 不在models.py中的models
概述 如何让你定义的model不在models.py中 在app的models目录中的models 你新建一个app后这个models.py就会自动建立,里面只有几行代码.那么如果是一个中大型项目,每 ...
- Chapter 4 Invitations——11
"Bella?" His voice shouldn't have been so familiar to me, as if I'd known the sound of it ...
- mybatis注解@Param对JavaBean的作用
当参数是一个JavaBean时,如果不用@Param且sql里获取变量用#{},如@Select("SELECT id,USERNAME,uname from uk_user where d ...
- 【ASP.NET Core快速入门】(七)WebHost的配置、 IHostEnvironment和 IApplicationLifetime介绍、dotnet watch run 和attach到进程调试
WebHost的配置 我们用vs2017新建一个空网站HelloCore 这里的CreateDefaultBuilde实际上已经在内部替我们做好了默认配置. UseKestrel 使用kestrel ...
- Python实战171201筛选数据
Python应用:网络编程,系统网络运维,3D游戏开发,图形界面开发,科学与数字计算,web后端. 对着慕课的练习,果然慕课的实战也是差距很大-------centos7 -Python3.6.3 筛 ...