力扣每日一题2021-11-25可怜的小猪


458.可怜的小猪

题目描述

可怜的小猪


思路

数学

使用n代指多少桶水,d为实验对象的反应时间,t为测试总时间。
根据题意,最大测试次数为k=t/d。
考虑k=1的情况,最简单的情况是,使用与水同等数量的实验对象数量来进行测试。此时哪个实验对象有反应,则可以推断出哪一桶水有问题。
但是这样的测试方法是低效的,每个实验对象仅承载了一桶水是否有问题。
为减少实验对象数量,每个实验对象需要测试多桶水,然后从最终所有实验对象的状态来推测哪一桶水有问题。
而通过递推关系,可以发现当k=j,i个实验对象可以判断的最大桶数为 ( j + 1 ) i (j+1)^i (j+1)i

Java实现

Java实现

class Solution {
    public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        int states = minutesToTest / minutesToDie + 1;
        int pigs = (int) Math.ceil(Math.log(buckets) / Math.log(states));
        return pigs;
    }
}
Python实现

Python实现

class Solution:
    def poorPigs(self, buckets: int, minutesToDie: int, minutesToTest: int) -> int:
        states = minutesToTest // minutesToDie + 1
        return ceil(log(buckets) / log(states))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值