班加罗尔谷歌软件工程师面试
简历筛选:我接到招聘人员的电话,询问我的工作经验。她还就某些排序算法的复杂性、最坏情况和最佳情况提出了一些基本问题。
之后,我有大约 20 天的时间进行第一轮电话面试。
电话采访:这是一个 45 分钟的视频群聊,共享了一个 Google 文档。他直接跳到了这个问题上。
问:给定一个只包含 I 和 D 的模式。 I 表示增加,D 表示减少。设计一种算法来打印遵循该模式的最小数字。 1-9 的数字和数字不能重复。
在对算法进行了简短讨论之后,我在共享文档上编写了代码。他对代码很满意,我们提前 5 分钟完成。
在这一轮结束 20 天后,我被要求进行现场面试。
第 1 轮:给定 (x, y) 坐标,创建一个函数,使每个坐标唯一地映射到一个整数。还要确保给定一个整数,您应该能够找到 (x, y) 坐标。所以 F(x, y) = z 以及逆 F(z) = (x, y)。
第 2 轮:给你一个包含数百万个数字的数组,并提供一个索引范围(比如左、右)。对于多个查询,每个查询都有输入左右索引,输出该范围内的最大值。
第三轮:
Q1)给定一个房间,房间左侧有小偷,传感器数量有限。他必须在没有传感器的情况下到达右侧。每个传感器放置在房间内的任意随机点,其覆盖范围为半径 r。看看小偷是否可以在不触及任何传感器范围的情况下到达右侧。
Q2) 给定一张有 n 个座位的长椅,坐的人很少,每次有新人坐在长椅上时,都告诉座位号,以使他与其他人的距离最大。
午休时间:我在一位 Google 员工的陪同下,我们就他正在从事的项目、工作文化和其他内容进行了非正式讨论。
第 4 轮:给定一个 0 和 1 的字符串,如果可能,告诉需要多少次拆分,以便每个拆分部分是一个可以表示为二进制 5 的幂的数字,并告诉最少拆分次数。