死理性派教你做谷歌面试题

标签: 理性 谷歌 面试 | 发表时间:2011-09-03 05:07 | 作者:(author unknown) han
出处:http://www.guokr.com/

长久以来,谷歌都因为拥有世界上最自由和优越的环境,让全人类羡慕不已。不过,谷歌这样一个以创造力为生的神奇地方,对应聘对象来说,想成为其中一员可是有着不小的难度。想进谷歌,先试试这些早已遍布互联网的谷歌面试题吧。

平分被有缺失的蛋糕

三个人打算分一个矩形的蛋糕,可是有一个人已经偷偷地切走了一小块矩形的部分。如果只能直直地切一刀,那么另外两个人应该怎么切才能体积均匀地分掉剩下的部分呢?


解答: 也许有人会说:横着切,将蛋糕分成两个等高的部分就好了嘛。但是一般蛋糕上层是奶油,下层只有干巴巴的面包,所以我们不准备把这个作为答案之一。

如果这个蛋糕没有被切走一部分,应该如何平分呢?方法当然有很多,但是所有的切法都有一个共同点,那就是这一刀一定经过矩形的中心点。反之亦然,所有经过中心点的直线都能将矩形平均分成两部分。带着这个结论回到开始的问题上,如果一刀经过大小两个矩形中心点,就能将大矩形 ABCD 和小矩形 AGFE 都分成面积相等的两部分,这样,我们的问题也就解决了。

/gkimage/s3/h8/v7/s3h8v7.png

在上图中,矩形AEFG是被偷偷挖走的部分。H和I是大小两个矩形的中心,直线JLK经过这两个中心点。可以看出四边形AJLG和JLFE的面积是相等的,而四边形AJKD和JKCB的面积也是相等的,因此剩下的深蓝色与绿色的面积也是相等的。


重男轻女的地方男女的比例是多少

/gkimage/9v/pl/r1/9vplr1.png

假设一个村子里,村民们都有重男轻女的观念,每一对夫妻都会不断地生产,直到生出一个男孩。如果生男生女的概率是一样的,那这个村子最终的男女比例应该是多少?


解答: 如果这个村子里有C对夫妻,那最后就有C个男孩。而女孩的数量呢?这是一个数学上求期望值的问题。

不妨任选一户人家来分析,设这户人家有n个女孩。如果 n = 0 ,也就是说这户人家第一次就生了个男孩,那么这个概率便是1/2。 n = 1 时,便是先女后男,概率是 1/2 * 1/2 = 1/4 。n = 2 时,便是前两次生了两个女孩,第三次生了男孩,概率是 1/2*1/2*1/2 = 1/8 。以此类推,一户人家出现n个女孩的概率是 1/2n+1 。由此可以算出一户人家女孩数量的期望值是 0 + 1/4 + 2/8 + 3/16 + … = 1 。因此,C户人家的女孩数量的期望值便是C,女孩和男孩的数量在期望上是相等的。也就是说,即使是在一个重女轻男的地方,男女比例仍然是 1 : 1 。


怎么测鸡蛋的强度最方便

/gkimage/dw/fo/f1/dwfof1.png

现在你在一栋 100 层高的大楼门口,手头上有两颗完全一样的神奇鸡蛋。如果你想知道这两个鸡蛋最高能从多少楼摔下而不破碎,用什么策略能保证你的尝试次数尽可能少呢?


解答: 在只有一个鸡蛋时,保险起见,我们只能从一楼开始,一层一层地试验,看看鸡蛋有没有被摔烂。这样最精确,但是消耗的时间也最久。如果我们事先就知道这个鸡蛋不被摔碎的最高落下点在30层到75层之间,我们最多也只要尝试45次就能知道结果。现在我们手上有两个鸡蛋,根据上面的分析,一个合理的策略就是用第一个鸡蛋确定出一个较小的楼层范围,然后在这个范围里用第二个鸡蛋从下往上逐层尝试。

比如说让第一个鸡蛋每隔5层试验一次。当它在某一层被摔烂时,也就意味着确定了一个4层的待测试宽度(为什么是4层呢?假如鸡蛋在5楼的时候没破,10楼的时候破了,那么我们就只需要知道鸡蛋在 6 , 7 , 8 , 9 层的结果)。这时候,用第二颗鸡蛋一层一层地尝试,就能用较少的次数找出鸡蛋刚好摔不烂的高度。

需要注意的是,如果想留给第二颗鸡蛋较小的测试宽度,就要缩短第一个鸡蛋的测试跨度。相应的,也就增加了尝试次数。为了确定合适的跨度,使得总试验次数之和尽可能小,我们可以采取如下的办法。

设跨度是L,第一颗鸡蛋的尝试次数就是[ 100/L ],第二颗鸡蛋的尝试次数就是 L - 1,因此尝试次数总和就是 [ 100/L ] + L - 1 。根据这个公式,我们可以列出下面这个表格:

/gkimage/ed/jk/or/edjkor.png

可以看出,我们只需要选 8 - 13 之间的一个宽度,都能使得总尝试次数是19次。

但问题是,这已经是最优策略了吗,有没有更好的方法呢?

有的。上面的方法固定了第一颗鸡蛋的测试跨度,如果我们灵活变动,就能使得总尝试次数变得更少。首先,我们选择从14楼丢下第一颗鸡蛋。如果它破碎了,我们就从1楼开始,逐层丢第二颗鸡蛋,最多试14次便能得到答案。如果它没有破碎,那我们往上走 13 层,在 27 楼第二次丢下第一颗鸡蛋。此时如果鸡蛋碎了,那我们只需要在 15 层到 26 层之间用第二颗鸡蛋进行最多12次试验即可,加上第一颗鸡蛋的两次尝试,仍然是14次。类似的,依次减小测试跨度,如果鸡蛋足够顽强,那我们丢下第一颗鸡蛋的楼层就分别是 14 , 27 , 39 , 50 , 60 , 69 , 77 ,84 , 90 , 95 , 99 以及最后的100层。因为第一颗鸡蛋每多尝试一次,第二颗鸡蛋需要尝试的最大次数就减少一次,因此,总尝试次数的最大可能值一直是不变的,保持在14次。用这种方法,我们只需要不超过14次的尝试就能够找出答案。有没有更优的策略了?感兴趣的读者可以自行思考。


孩子多大了

/gkimage/1y/3q/0d/1y3q0d.png

两个数学家在某次会议上又见面了——他们是老朋友,可是有十几年没见了。

老张:这些年怎么样啊。

小王:挺好的,我结婚了,现在都是三个孩子的爸爸了。

老张:那很幸福啊,孩子们多大了?

小王:他们年龄乘积是72,年龄的和与你的出生日期一样(8月的某号)。

老张:我还是猜不出来。

小王:我的大儿子刚开始学钢琴。

老张:哦,我知道了!

问:小王的三个儿子分别多大呢?

解答: 这道题的思考比较繁琐,让我们一步一步地分析。

三个孩子年龄的乘积是72。年龄的和是8月份的某一号,也就是是在 1 ~ 31 之间。我们首先把符合所有上面两个条件的数列出来。

/gkimage/q3/s7/kp/q3s7kp.png

这是根据小王的一句话所能得到的信息。虽然我们不知道老张的生日是几号,但老张自己肯定知道,所以他只要找出哪个数对的和与自己的生日相同便能确定。可是他却说“我还是猜不出来”,那就表明和等于他自己生日的数对不止一个。因此可筛选出如下两组数:

2, 6, 6

3, 3, 8

这两组数的和都是14,所以老张无法判断。这时小王说“我的大儿子刚开始学钢琴”。在 2 , 6 , 6 和 3 , 3 , 8 中,能确定大儿子的是第二组。所以到这里,老张就知道了小王三个孩子的年龄。这个问题本身并不算难,但如果被当面问这个问题并要求很快答出来,那就需要一定能力了。


货真价实的谷歌面试题

/gkimage/u3/mb/0l/u3mb0l.png

不同于上面的“流传”,下面两道是已被确认了的google面试题。

第一题,给你一个长度为 N 的链表。N 很大,但你不知道 N 有多大。你的任务是从这 N 个元素中随机取出 k 个元素。你只能遍历这个链表一次,且必须保证取出的元素是完全随机的(出现概率均等)。

第二题,给你一个数组 A [ 1 .. n ] ,请你在 O ( n ) 的时间里构造一个新的数组 B [ 1 .. n ] ,使得 B [ i ] = A [ 1 ] * A [ 2 ] * ... * A [ n ]/A [ i ] 。你不能使用除法运算。

这两道题目看起来很专业,但有趣的是,即使没有学过信息学的人也可以想到答案。

第一题的意思就是有一大串物品,它们能且仅能逐个经过你眼前一次。你不知道它们的个数,要求你从中随机地抽取 k 个物品,同时必须保证取出的元素是完全随机的(出现概率均等)。

第二题给出了一个数列 A [ 1 .. n ] ,要求在较短的时间内不用除法构造一个新数列 B [ 1 .. n ] ,使得 B [i] = A [ 1 ] * A [ 2 ] * ... * A [ n ]/A [ i ] 。 n是这个数组的长度。而 O ( n ) 是评判计算方法速度的标准。如果一个解答方法在n任意变化的情况下,都能满足总共的计算次数相当于是 n 乘以一个常数C这个条件,那么就称这个解答方法是 O ( n ) 的;如果这个解答方法能满足总共的计算次数是 n 2 乘以常数C,那么这个解答方法就被称作是 O ( n 2 ) 的。

第一题没有告诉我们物品的个数N,所以我们没法算出 k/N,连最基本的每样物品被选中的概率都不知道,还怎么继续操作呢?既然我们不知道一共有多少个物品,那我们就应该在所有的物品都经过我们眼前之后再做抉择。当每个物品经过我们眼前的时候,可以设法对应地给它生成一个 0 到 1 之间的随机数。等到我们见过了所有的物品之后,只需要选择对应的随机数最大的前 k 个物品就行了。

第二题不允许用除法增加了不少难度。 B [ i ] 不用除法来表示的话就是: B [ i ] = A [ 1 ] * ... * A [ i - 1 ] * A [ i + 1 ] * ... * A [ n ] 。若按照这个表达式进行计算,生成每个 B[ i ] 的时候要进行n - 1次乘法,这样一来完全生成 B [ 1 .. n ] 就需要 O ( n 2 ) 的时间了。我们需要通过减少重复的运算来提高效率。

注意到 B [ i ] 可以看作是两个部分的乘积, A [ 1 ] * ... * A [ i - 1 ] 和 A [ i + 1 ] * ... * A [ n ] 。同理 B [ i + 1 ] 就由 A [ 1 ] * ... * A [ i - 1 ] * A [ i ] 和 A [ i + 2 ] * ... * A [ n ] 组成。计算 B [ i ] 时的许多乘法在计算 B [ i + 1 ] 的时候又进行了一遍,因此可以重复利用上一次运算的结果,以避免无谓的运算。从这点出发,我们构造两个新的数列:

S [ i ] = A [ 1 ] * ... * A [ i – 1 ]

T [ i ] = A [ i + 1 ] * ... * A [ n ]

因为生成完整的 S [ 1 .. n ] 和 T [ 1 .. n ] 都能在 O ( n ) 的时间内完成,那么根据 B [ i ] = S [ i ] * T [ i ] 这条式子,生成整个 B [ 1 .. n ] 便也能够在 O ( n ) 的时间内完成了。


不得不说,谷歌是个很爱玩的公司。它曾在MIT校园内到处张贴着一份密码,据说,这份密码包含了一个Google Jobs的电话号码,解开密码的人可以通过此电话留下自己的个人信息,进入谷歌工作。各位读者,你能解开这个密码吗?如果有漂亮的解答,我会在这里贴出来。
/gkimage/u5/5q/wq/u55qwq.png


相关阅读: 死理性派教你做微软面试题

相关 [理性 谷歌 面试] 推荐:

死理性派教你做谷歌面试题

- han - 果壳网 guokr.com - 果壳网
长久以来,谷歌都因为拥有世界上最自由和优越的环境,让全人类羡慕不已. 不过,谷歌这样一个以创造力为生的神奇地方,对应聘对象来说,想成为其中一员可是有着不小的难度. 想进谷歌,先试试这些早已遍布互联网的谷歌面试题吧. 三个人打算分一个矩形的蛋糕,可是有一个人已经偷偷地切走了一小块矩形的部分. 如果只能直直地切一刀,那么另外两个人应该怎么切才能体积均匀地分掉剩下的部分呢.

谷歌买房面试题

- tiancaicai - 白板报
现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万. 如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子. 工作年数 不吃不喝存款 房价 资金缺口 买房的希望 1 40万 220万 180万. 2 80万 242万 162万.

【外刊IT评论】一次谷歌面试趣事

- Baoping - 外刊IT评论
本文是从 A Google Interviewing Story 这篇文章翻译而来. 很多年前我进入硅谷人才市场,当时是想找一份高级工程师的职位. 如果你有一段时间没有面试过,根据经验,有个非常有用的提醒你应该接受,就是:你往往会在前几次面试中的什么地方犯一些错误. 简单而言就是,不要首先去你梦想的公司里面试.

大牛在谷歌这样面试产品经理

- - 人人都是产品经理
产品经理算是目前互联网行业最难招的职位之一. Lagou数据显示,平均耗时49.7天. 需求大,从业者数量也不少,但企业常抱怨难找到合适的人. 一枚产品合格的产品经理长成啥样?Google Venture的合伙人Ken Norton面试过大量的产品经理,他眼中好的产品经理是既要思维敏捷,又要善于配合团队的人.

9个offer,12家公司,35场面试,从微软到谷歌

- - CSDN博客移动开发推荐文章
毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况:. 1) 微软,3面->终面,搞定(+1). 2) 百度,3面->终面,口头offer(+1). 5) 布丁移动,3面,搞定(+1). 6) 涂鸦游戏,3面,搞定(+1). 7) 友盟,3面->CEO面,搞定(+1).

2019高考编程卷:谷歌面试编程题及解题技巧(MIT版)

- - 机器之心
课程链接:http://courses.csail.mit.edu/iap/interview/index.php. 本课程重点介绍科技公司在面试时经常出现的计算机科学问题,其中包括时间复杂度、哈希表、二进制树搜索,以及 MIT「算法设计与分析」(MIT 6.046)课程中会出现的内容. 但是,大部分时间都会专注于你不会在课堂上学到的内容,例如刁钻的按位逻辑和解决问题的技巧.

死理性派教你做微软面试题

- Hing Sar - 果壳网 guokr.com - 果壳网
经常能在网上看到各种不知真假,却被转烂了的“超变态但很经典的微软面试题”. 那微软这样的大公司,到底有多喜欢“蹂躏”面试者的智商呢. 本文就从一套广为流传的的“10个最著名微软面试题”中选取了几个最经典的,来和它们较量较量. 一座小镇里有100对夫妇,他们都遵守一个奇怪的风俗:如果妻子发现丈夫背叛了她,那她就会在当天夜里杀死自己的丈夫.

谷歌第59号员工:大公司最大的问题是太理性

- psyZETA - cnBeta.COM
据国外媒体报道,谷歌前员工道格拉斯-爱德华斯(Douglas Edwards)最近出了一本新书,名为《我是幸运儿:谷歌第59号员工的自白》(I'm Feeling Lucky: The Confessions of Google Employee Number 59). 因为这本新书,爱德华斯近日接受了《华尔街日报》的采访.

"谷歌是怎样给搜索结果排序——理性派应该看看

- ROY - Cao Liu
9 月 27 日谷歌推出新款doodle,庆祝自己 13 岁生日. 在这个世界上,谷歌几乎无人不晓了. 但鲜为人知的是,在13年前,拉里•佩奇( Larry Page )和谢尔盖•布林( Sergey Brin )正是依靠先进的算法发家并创立谷歌的. 在这个世界上最自由和创新公司的生日里,来听听死理性派讲述它当年的数学故事吧.

变态面试

- Tony - 叫兽与你同在