力扣题458:可怜的小猪
力扣题458:可怜的小猪
有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。题目链接
喂猪的规则如下:
1、选择若干活猪进行喂养
2、可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。
3、小猪喝完水后,必须有 minutesToDie 分钟的冷却时间。在这段时间里,你只能观察,而不允许继续喂猪。
4、过了 minutesToDie 分钟后,所有喝到毒药的猪都会死去,其他所有猪都会活下来。
5、重复这一过程,直到时间用完。
给你桶的数目 buckets ,minutesToDie 和 minutesToTest ,返回在规定时间内判断哪个桶有毒所需的 最小 猪数。
示例:
示例一:
输入:buckets = 1000, minutesToDie = 15, minutesToTest = 60
输出:5
示例二:
输入:buckets = 4, minutesToDie = 15, minutesToTest = 15
输出:2
提示:
- 1 <= buckets <= 1000
- 1 <= minutesToDie <= minutesToTest <= 100
题解思路
为了拯救小猪,我辈义不容辞。
一个猪代表一个维度。
简单来说,例如有两头猪,一头猪代表行,一头猪代表列,
如:我们有16个桶,放在4行4列。
第一次检测:测试第一行,第一列
第二次检测:测试第二行,第二列
…
假如行猪死在第二行,列猪死在第三列,则说明第三行第二列的痛就是毒药。
所以每一个维度的最大值为minutesToDie / minutesToDie + 1(行猪或列猪检测到第三行都没有死时,就不用检测了,第四行第四列必是毒药)
那么我们只需要确定需要几个维度(几个猪)可以满足规定次数内检测完所有buckets(桶)即可。
源代码
class Solution {
public:int pow(int m, int n){ //返回m的n次方int res = m;for(int i = 1; i < n; i++){res *= m;}return res;}int poorPigs(int buckets, int minutesToDie, int minutesToTest) {int pigs = 0;int maxRound = minutesToTest / minutesToDie + 1;while(pow(maxRound, pigs) < buckets){pigs++;}return pigs;}
};
就解决完啦!
力扣题458:可怜的小猪相关推荐
- 458. 可怜的小猪
458. 可怜的小猪 有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水.它们从外观看起来都一样.为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断.不幸的是 ...
- 滑动窗口算法框架(Java版)秒杀力扣题(76、567、438、3、485)
一.声明 1.非常感谢东哥(labuladong)分享了**滑动窗口算法框架**: 2.我在理解了东哥的思想后,用Java实现了滑动窗口算法框架,一来方便自己学习,二来方便一些Java小伙伴: 3.再 ...
- 力扣题【简单级别】1
2019.9.10 771.宝石与石头 public int numJewelsInStones(String J, String S) {if (J == null || S == null) re ...
- 力扣题 <爬楼梯> 递归结合表
题目描述: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶 ...
- 力扣题——2.除数与被除数
下面,我们来看一道力扣题 题目如下: 需求:给定两个整数,被除数和除数(都是正数,且不超过int范围)将两数相除 要求:不使用乘法.除法和%运算符得到商和余数 分析: 在分析这道题之前,我们先来将一个 ...
- 力扣题库设计循环队列
题目要求: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列 ...
- 【微软算法面试高频题】可怜的小猪
微软和谷歌的几个大佬组织了一个面试刷题群,可以加管理员VX:sxxzs3998(备注CSDN),进群参与讨论和直播 1. 题目 有 buckets 桶液体,其中正好有一桶含有毒药,其余装的都是水.它们 ...
- 一道『easy』等级的力扣题,我写了两个小时的笔记...
做第13题:13. 罗马数字转整数,本身的逻辑很简单,但是我写了两个小时的笔记. 原因是我对 C++ 11 及以上一直不熟(以前一直在用 python 干活儿),因此,决定,一边做题,一边总结知识点. ...
- LeetCode 458. 可怜的小猪(信息论方法)
题目描述 有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在 15 分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒 ...
最新文章
- SAP Web Intelligence初探
- IEEE CS:2021年的12大技术趋势
- 开发人员职位:对编程语言Python的需求明显下降
- Fabric架构演变之路
- 多线程与高并发(二):解析自旋锁CAS操作与volatile
- hdu4699-Editor【对顶栈】
- dubbo的端口地址和ip写在那_开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~...
- maven+mvc设计模式
- MySQL百万级高并发网站优化
- 牛客练习赛29 F 算式子
- 【CCF】关于NOI Online测试有关事项的问答
- Linux运维工程师必备工具合集
- 树莓派 PHP白屏,树莓派系统安装及3.5寸显示屏白屏解决办法
- WIN2016远程桌面服务配置和授权激活
- 163邮箱|电子邮件注册,163邮箱如何注册申请?
- Python的数据科学函数包(二)——pandas(series dataframe)(loc iloc ix)(csv文件)
- 世界杯历史:1930年---2002年(乌拉圭---韩日)
- OneNote插件找不到选项卡的解决
- 图片无损放大软件哪个好?图片放大不失真这样做
- 基于STM32MP157的GPU编程之DRM驱动调试