📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
楼主: YankeeDoodle
跳转到指定楼层
上一主题 下一主题
收起左侧

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

   
🔗
 楼主| YankeeDoodle 2021-4-21 11:12:50 | 只看该作者
全局:
有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minutesToTest 分钟时间来确定哪桶液体是有毒的。

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

使用道具 举报

全局:
YankeeDoodle 发表于 2021-04-20 20:12:50
有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有 minute
这一道听起来想我之前在Google onsite看到的题目,大概的方向就是用分治来解决,让小猪喝一半数量的水然后根据结果继续分治下去,runtime是O(log n)
回复

使用道具 举报

🔗
 楼主| YankeeDoodle 2021-4-22 11:25:53 | 只看该作者
全局:
本帖最后由 YankeeDoodle 于 2021-4-22 11:27 编辑

解题思路        

这道题初看的时候,很多人会纠结:到底需要多少只小猪,而每只小猪又应该具体如何喝水才能判断出哪只水桶有***?
这道题最开始不要去关注细节,去想到底应该怎么喂水。而是应该先思考在考察哪方面的问题,数组、链表、二叉树还是数学?那么仔细思考就能得出结论,本质上在考察数学中的进制问题。举例说明:
假设:总时间 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只猪,可以在1h之内最多喝 4次水(60/15),但是可以检验5个桶,如果前四次没死,说明第5个桶有毒。
对于2只猪,现在可以让一只猪一下喝5桶水,如图所示的一只猪喝行的五个,一只猪喝列的五个,这样就可以确定哪个桶有毒。
对于3只猪,就是三维的 5 X 5 X 5 ,可以检测125个桶;

无标题.png (45.77 KB, 下载次数: 0)

无标题.png

评分

参与人数 2大米 +4 收起 理由
tl2k3 + 3 给你点个赞!
luminis + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
Zwy_19980514 2021-4-26 12:21:34 | 只看该作者
全局:
谢谢楼主,马一下
回复

使用道具 举报

🔗
挖煤 2021-5-12 21:44:12 | 只看该作者
全局:
马克楼主!!lz好人 谢谢
回复

使用道具 举报

🔗
jimlau 2021-5-18 18:23:03 | 只看该作者
全局:
冲啊,临阵磨枪,不快也光
回复

使用道具 举报

🔗
TomWang 2021-5-27 23:33:15 | 只看该作者
全局:
很有用的信息!
回复

使用道具 举报

🔗
dollarbill 2021-5-28 03:30:21 | 只看该作者
本楼:
全局:
helpful!!
回复

使用道具 举报

🔗
dollarbill 2021-5-28 03:30:31 | 只看该作者
全局:
very useful...
回复

使用道具 举报

🔗
cs2009 2021-6-22 05:32:27 | 只看该作者
全局:
哈哈哈哈哈哈哈哈哈哈哈老哥太6了。。。。
回复

使用道具 举报

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

本版积分规则

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