谷歌mtv 5轮

19日onsite

第一轮:消消乐的消除算法,讨论了算法。实现的时候只需要实现怎判断横竖对角线有超过5个连续的就可以了,返回true|false。
第二轮:给你一个sorted array, 返回每个数字平方后依然sorted array,比如[-2,1,3,4],返回[1,4,9,16]. 要求O(n) 复杂度。 followup是在保证O(n)复杂度的情况下,怎么用constant space实现。
第三轮:给你两个字符串3a1b3c, 2a1a1b2c1d。怎么判断他们在expand以后是代表同一个字符串。要求O(n), constant space.
Followup: 给你3a1b3c3d2a, 这样的字符串和一个n,把这个字符串填入宽度为n的board,从左到右,比如说是4,就是长下面这样子。
a a a b
c c c d
d d a a
然后如果从右往左读,应该返回1b3a1d3d2a2d。这个board不一定需要填,只是为了表达这个题目,就是给你一个string,返回后面一个string这样。
第四轮:有个用户的类,用户每听一次歌,就会调用listen(song)这样的接口。还有一个接口是返回这个用户听的topN的歌手。followup是如果要返回topN in a week 怎么做。
第五轮:第一题,给你一个board,每个cell上面都有数字,代表访问这个cell需要的cost,也给你了从cell走到cell的边的cost。然后你在最上面,求问到最下面这一行的最小cost。走的规则是每一个cell,只能走到下面一行的任何一个cell,不能向上和横向走, 比如第2行第1列的cell,可以走到第三行第1列,第2列,第3列。。。如果输入参数没有第2行第1列到第3行第x列的数据,那说明这条边是不可达的。
第二题,给你一堆点,求由这堆点组成的最小矩形的面积。矩形长宽必须是平行于坐标轴的,没有斜的那种。

一个想法,像你说的,从两端往中间赶。正的那边大就 right --, 负的那边大就正负交换一下。然后负的平方放在刚才正的那个位置。可能就行了。

給你點個贊!

请问第四轮是在线的topN吗?可以讲讲思路吗

请问第一题如何constant.
显而易见的解法是merge two sorted array
从正负分界处向左向右 merge
但是如何in place的调整位置?
从后往前?

感谢分享,请问第二轮是two pointer swap吗

coding了一下 发现有一些edge cases. 不知道面试的时候楼主写出来了吗? 比如交换过去后 下一下pos number无法确定

抱歉想错了。

换个思路试试。用 0 为 pivot,然后quick select 试试呢。

有篇论文讲这个in place merge. 但是很复杂. 如果O(1)space做不到 不知道面试官会给什么评价