谷歌 上门

上周面的谷歌 上门,之前也在地里看了很多谷歌的面经,但是由于他家题库太大,以致于每道题貌似见过,又貌似没有见过。

1.大黑哥。稍微有点口吃,聊天比较费劲。。。。给你一堆log,里面每个人 的cpu usage,起始时间和结束时间, 每个人的peak usage。 会议室2的做法。 做完了以后写test case。然后简单问了一下问数据量很大怎么破。 然后说题目改了,之前说的是在这个时间段里面是cpu usage是恒定不变的, 现在变成线型增长的了,start time的时候是0, end time 的时候是log里面的那个值,然后问同样的问题。。。我第一反应还是往会议室2上面套,说那就看要多精确,比如说要精确到分钟,那就把之前的时间段拆成分钟级别的。小哥将信将疑的看着我,让我码出来来看看。写完了,小哥拍完照,看看时间,给我说,其实你这个做法不太对,你想想,如果两个时间段t1, t2 overlap的话,最大值只可能出现在什么地方。 我一想,说只可能出现在t1.endtime 或者t2.endtime的地方,小哥说,那就对了嘛,然后就走了。。。。

  1. 傻白甜小姐姐。问我对context free grammar 熟不熟悉。 我说并不知道,小姐姐表示非常好,就喜欢考不知道的。大概意思就是,给一串字符,比如说“abc”,grammar 会有一个 mapping,比如说a -> “ab”, b -> “c”, c -> “”;然后问给一个string n 个iteration后,string 会变成什么结果。 基本上就是brute force一下。然后小姐姐问,你这个东西的空间复杂度是多少,我说这个很难讲,得看你这个mapping是什么情况。她说,那好,如果我说不太关心最后string会变成什么样,我只关心最后有多长。 然后我就犯傻逼了,抠了半天脚,没有想出来,耽误好多时间。估计小姐姐都崩溃了,其实方法就是只记录string中的每个character的个数,就能generate下一个string各个character 的个数,最后加一下就完了。码完了以后,基本上没有多少时间了,又问了一个问题,说给我的一个string,判断通过一定iteration后,能不能变得stable。比如说上面那个abc,因为a会变成ab,b会变成c, c会变没有,所以这个是stable的。然而想了一会儿,并没有想出来,时间就到了。

  2. 三哥面,国人大哥shadow。出去上厕所的时候,国人大哥问我上午如何,我说一般般。大哥安慰我说,没有关系,面挂一轮也无所谓。在此谢过大哥了。问题是,你有一系列窗口,有些窗口会有重叠,让计算出每个窗口最后会有百分之多少展现出来,自己设计数据结构。我大概的意思就是,先假设这些窗口,只有两两重叠的,写了一个method。然后在三哥的提示下处理两个以上重叠的,大致的想法就是,比如说你已经算了0 到i个窗口,现在来了i + 1 一个窗口,你只要保证前面0到i个窗口中,没有两两重叠的,那算i + 1的时候,就不会有两个以上重叠的。所以做法就是每次在处理i + 1 的时候,先处理0到i,发现有重叠的,就split成多个窗口。最后code写得一团糟,估计挂了。

  3. 东欧大姐,问题很简单 https://www.geeksforgeeks.org/tree-isomorphism-problem/。 我照这个上面的方法码完以后,大姐表示可以,让我开始优化。很显然我没有get到大姐的点,我觉得这个算法基本上已经很优化了,不知道该如何改进。感觉大姐也应该是暗示到极限了,才明白大姐的意思是,程序的最后一行递归的时候,因为要分别 node1.left 和 node2.left, node1.right 和 node2.right比, 或者node1.right 和node2.left, node1.left和node2.right 比。所以这里还可以优化,就是在对于每一个node,只要做一些约束,比如说,左边的val比右边小,就能够只用左子树和左子树比,右子树和右子树比。赶紧改完code,照完相,走了。

  4. ABC 小哥和大黑哥, 问了一个拿纸牌游戏, 纸牌上面有值,比如说 100, 1, -1, 2, 200, 1. 然后两个人轮流拿,直到拿完。 但是每次只能拿从左边数起的前三个,但是如果你要拿第三个,就必须前两个都拿了,你要拿第二个,就必须第一个也拿了,大家都最优策略,问最后第一个人能拿多少分。dfs 加 cache做了。 又问了一个bst相关的题,不难

总体来说,感觉狗家面试还是有点难,问题就在于如果看不穿问题的本质,或者说get不到面试官提示,就非常伤。所以估计多半挂了, 就当学习学习,下次继续面。

第三轮可能是这个 https://leetcode.com/problems/rectangle-area-ii/description/

想问一下关于第五题,每次拿的时候,是只知道前三张是多少值,还是后面所有牌的值和顺序都是知道的

楼主,第二题是一个图问题吧。比如a->ab代表a指向ab,那么,需保证每个节点的入度小于等于出度?因为入度大于出度的话每次迭代此节点个数一定增长,最后不能stable.

多谢楼主分享。

  1. 请问数据量大是要如何处理?followup 线性增长那问有些没看明白,能否再解释下,谢谢。
  2. 最后stable是图有环吧?

感觉好像不太像

这我就不知道了。 比如说,上面那个例子,a变ab,b变c,c变没,我感觉里面没有环啊,但是它怎么变,都还是abc。

感谢分享!祝好运!

1.数据量大,我基本上就是胡喷,大致就是按照某个规矩(比如说按照user id),hash到 多个机子上算,算完了汇总一下。 follow up是这样的,比如说,你有一个log, start time 是1:00, end time 是1:30, usage 是30。 那么刚开始的时候,1点就是0, 一点十分就是10, 一点二十就是20, 一点三十就是30, 然后瞬间掉为0.

  1. 第二个不太清楚,我给忘了stable的定义是什么,是说string 最后不变,还是说string最后的长度不变就算stable。

好的,十分感谢!