力扣题解
自题解功能上线以来
题解区涌现了很多优质题解
如果你有更好的解题思路
不如来题解区大显身手
你可获得
1.力扣官方平台推荐
2.力扣积分
1篇精选题解:200 力扣积分
1篇优质题解:100 力扣积分
(注:题解著作版权归发布者本人所有)
本期精选题解由我们的用户“灵魂画师牧码”倾情撰写,一起来看看吧!
458.可怜的小猪(文末点击阅读原文查看题目)
题目描述
有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在 15 分钟内死去。
问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少只猪?
回答这个问题,并为下列的进阶问题编写一个通用算法。
进阶:
假设有 n
只水桶,猪饮水中毒后会在 m
分钟内死亡,你需要多少猪 (x)
就能在 p
分钟内找出 “有毒” 水桶?这 n
只水桶里有且仅有一只有毒的桶。
提示:
标签:数学
这道题初看的时候,很多人会纠结:到底需要多少只小猪,而每只小猪又应该具体如何喝水才能判断出哪只水桶有毒药?
这道题最开始不要去关注细节,去想到底应该怎么喂水。而是应该先思考在考察哪方面的问题,数组、链表、二叉树还是数学?那么仔细思考就能得出结论,本质上在考察数学中的 进制 问题。
举例说明:
看到这里我们再去关注细节,2只小猪到底怎么喂水,在上述假设下,能够最多验证25桶水呢?请看下方图画解答:
动图:
图片分解:
class Solution {
public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
int times = minutesToTest / minutesToDie;
int base = times + 1;
// base ^ ans >= buckets
// ans >= log(buckets) / log(base)
double temp = Math.log(buckets) / Math.log(base);
int ans = (int)Math.ceil(temp)
return ans;
}
}
/**
* @param {number} buckets
* @param {number} minutesToDie
* @param {number} minutesToTest
* @return {number}
*/
var poorPigs = function(buckets, minutesToDie, minutesToTest) {
const times = minutesToTest / minutesToDie;
const base = times + 1;
// base ^ ans >= buckets
// ans >= log(buckets) / log(base)
const temp = Math.log(buckets) / Math.log(base);
const ans = Math.ceil(temp)
return ans;
};
本文作者:灵魂画师牧码
编辑&版式:霍霍
声明:本文归作者版权所有,如需转载请联系。