ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode 每日一题 458. 可怜的小猪

2021-11-25 09:01:12  阅读:167  来源: 互联网

标签:458 cnt 小猪 minutesToDie int buckets minutesToTest LeetCode log


题目描述

buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。

来源:力扣(LeetCode)
喂猪的规则如下:

  1. 选择若干活猪进行喂养
  2. 可以允许小猪同时饮用任意数量的桶中的水,并且该过程不需要时间。
  3. 小猪喝完水后,必须有 minutesToDie 分钟的冷却时间。在这段时间里,你只能观察,而不允许继续喂猪。
    过了 minutesToDie 分钟后,所有喝到毒药的猪都会死去,其他所有猪都会活下来。
    重复这一过程,直到时间用完。
    给你桶的数目 bucketsminutesToDieminutesToTest,返回在规定时间内判断哪个桶有毒所需的 最小 猪数。

Solution

最优解法为,将所有的猪按照某进制编号,得到一个数字,每头猪确定这个数字的某一位即可。
这个进制数字怎么找呢?
cnt = minutesToTest / minutesToDie
显然我们的 \(猪的数量+1\) 就是我们的进制(base)。 然后我们可以得到的 最大的液体数量的范围为 \(ans \le base ^ {cnt}\)
因此ans = ceil(log(buckets) / log(base));

AC_CODE

class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int cnt = minutesToTest / minutesToDie;
        return ceil(log(buckets) / log(cnt + 1));
    }
};

标签:458,cnt,小猪,minutesToDie,int,buckets,minutesToTest,LeetCode,log
来源: https://www.cnblogs.com/c972937/p/15601189.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有