LeetCode每日一题:458. 可怜的小猪【2021/11/25】

218 阅读1分钟

题目链接:458. 可怜的小猪 - 力扣(LeetCode) (leetcode-cn.com)

难度:Hard

数学题。考虑有 nn 只猪,kk 个桶,最少需要检测几次?

n=1n=1: 逐次检查每个桶,最少需要 k1k-1 次。

n=2n=2: 把桶按正方形排列,共 k\sqrt k 行,每行至多 k\sqrt k 列,两只猪同时分别逐行逐列检查,最少需要 k12\sqrt[2]{k-1} 次

n=3n=3: 把桶按正方体排列,共 k3\sqrt[3] k 层,每层至多 k3\sqrt[3] k 行,每行至多 k3\sqrt[3] k 列。三只猪同时分别逐层逐行逐列检查,最少需要 k31\sqrt[3]{k} -1 次

以此类推,有 nn 只猪,kk 个桶,最少需要检测 kn1\sqrt[n] k -1 次。

通过上述推导,有 nn 个桶,最多 mm 次检测机会的情况下,最少需要 logm+1n\log_{m+1}{n} 只猪。

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