12
返回列表 发新帖
楼主: YankeeDoodle
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 微软近期高频面试题分享 + 分析(八)

   
🔗
 楼主| YankeeDoodle 2021-6-27 10:49:30 | 只看该作者
全局:
小猪问题

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

喂猪的规则如下:

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

给你桶的数目 buckets ,minutesToDie 和 minutesToTest ,返回在规定时间内判断哪个桶有毒所需的最小猪数。
  1. 示例 1:
  2. 输入:buckets = 1000, minutesToDie = 15, minutesToTest = 60
  3. 输出:5

  4. 示例 2:
  5. 输入:buckets = 4, minutesToDie = 15, minutesToTest = 15
  6. 输出:2

  7. 示例 3:
  8. 输入:buckets = 4, minutesToDie = 15, minutesToTest = 30
  9. 输出:2
复制代码
回复

使用道具 举报

🔗
 楼主| YankeeDoodle 2021-6-28 10:26:24 | 只看该作者
全局:
小猪问题解析

举例说明:

假设:总时间 minutesToTest = 60,死亡时间 minutesToDie = 15,pow(x, y) 表示 x 的 y 次方,ceil(x)表示 x 向上取整 当前有只小猪,最多可以喝 times = minutesToTest / minutesToDie = 4 次水 最多可以喝 4 次水,能够携带 base = times + 1 = 5 个的信息量,也就是(便于理解从 0 开始): (1) 喝 0 号死去,0 号桶水有毒 (2) 喝 1 号死去,1 号桶水有毒 (3) 喝 2 号死去,2 号桶水有毒 (4) 喝 3 号死去,3 号桶水有毒 (5) 喝了上述所有水依然活蹦乱跳,4 号桶水有毒

结论是 1 只小猪最多能够验证 5 桶水中哪只水桶含有毒,当 buckets ≤ 5 时,answer = 1。那么 2 只小猪可以验证的范围最多到多少呢?我们把每只小猪携带的信息量看成是 base进制数,2 只小猪的信息量就是 pow(base, 2) = pow(5, 2) = 25,所以当 5 ≤ buckets ≤ 25时,anwser = 2。那么可以得到公式关系:pow(base, ans) ≥ buckets,取对数后即为:ans ≥ log(buckets) / log(base),因为 ans 为整数,所以 ans = ceil(log(buckets) / log(base))


那小猪到底是如何喂水的呢?下面这个动态图可以介绍整个喂水的过程:


  1. class Solution {
  2. public:
  3.     int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
  4.         int states = minutesToTest / minutesToDie + 1;
  5.         return ceil(log(buckets) / log(states));
  6.     }
  7. };
复制代码


pig.gif (857.86 KB, 下载次数: 3)

pig.gif
回复

使用道具 举报

全局:
mark一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表