回复: 26
跳转到指定楼层
上一主题 下一主题
收起左侧

求两道google onsite题目的详细解答~跪谢!!

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
跪求大神,给一些比较详细的解答。
第一道题是:
求party中最大level的和
给一个Employee class
class Employee {
       int level;
       List<Employee> directReports; // 直接的汇报关系
}
该方法要求得到所有能参加party的人的level之和的最大值。参加party的唯一限制条件是如果邀请了一个人的direct report,则这个人不能参加party(同理, 邀请了一个人,那么这个人的direct report也不能参加party)。我卡在了如果这个关系图里面是有环的话,我不知道怎么解决?

第二题就是经典的扫地机器人,我是完全不会做:
要求全部扫完房间,一开始不知道机器人在哪里,不知道一共有多少个cell,比企鹅也不知道机器人一开始朝向哪里(这个可以假设,从任何一个方向开始,感觉dfs结果都是一样的)
Given a robot cleaner in a room modeled as a grid. Each cell in the grid can be empty or blocked. The robot cleaner can move forward, turn left or turn right. When it tries to move into a blocked cell, its bumper sensor detects the obstacle and it stays on the current cell.

. 鍥磋?鎴戜滑@1point 3 acres
The control API:
.鐣欏?璁哄潧-涓

上一篇:亚麻电话+上门,非典型性面经
下一篇:脸书店面
推荐
qcz1107 2018-4-13 09:34:58 | 只看该作者
全局:
不知道说的对不对,

首先我们用connected component labelling 的方法把相互有关联的人都放到同一个组里,同时记录每个人被report的次数,当然你挨个search也行。

因为有level,我们可以做个假设:同级之间不互相report,如果你发现互相report或者还能向下级report的话就比较麻烦了,你要在每个级更新的时候找环,基本和暴力枚举没啥区别了。

下面我们设计一个DP记录:
从级别最低(如果同级可以互相report还能向下级report的话就用report次数最少)的人开始,记录3个东西,1.该人被邀请的话最大得分 2.该人不被邀请的最大得分 3.当前层最大得分的时候(所有人)不能被邀请的次数(这可能是个vector哦,如果能向下report,gg,基本等于记录所有情况吧。。。)
下一层把 被report数+1 的人挨个加进来,更新所有人状态,祈求不要出现得分一样的情况,否则你要把多个相同最高分的情况下每个人不能被邀请的次数都maintain住,根据此人不能被邀请次数是否为0,更新一次总和。

其实我感觉只是弱一点的暴力枚举。



补充内容 (2018-4-13 09:38):
感觉从级别最高的人开始往下dp比较好,记录下一层每个人不能被邀请的次数,恩
回复

使用道具 举报

推荐
hjh1011 2018-4-7 05:19:58 | 只看该作者
全局:
前两天写的扫地机器人,求大神斧正
  1. '''
  2. ## this API is already defined for you
  3. class Robot(object):
  4.     def clean():
  5.         ## clean the current location.
  6.     def turnleft(k):
  7.         ## turn left k*90 degrees.
  8.     def turnright(k):
  9.         ## turn right k*90 degrees.
  10.     def move():
  11.         ## move forward for 1 position and return True, return False if that’s not possible.
  12. '''

  13. class Solution(object):
  14.     def __init__(self):
  15.         self.direction = 0

  16.     def cleanRoom(self, robot):
  17.         ## robot: Robot
  18.         self.dfs(robot, set(), None, (0, 0))

  19.     def dfs(self, robot, visited, prev, curr):
  20.         robot.clean()
  21.         directions_tried = set()
  22.         while len(directions_tried) < 4:   ## try all 4 directions
  23.             while self.direction in directions_tried:
  24.                 robot.turnleft(1)   ## everytime you turn, update self.direction
  25.                 self.direction = (self.direction + 1) % 4

  26.             directions_tried.add(self.direction)
  27.             if self.direction == 0:
  28.                 new_pos = (curr[0] + 1, curr[1])
  29.             elif self.direction == 1:
  30.                 new_pos = (curr[0], curr[1] + 1)
  31.             elif self.direction == 2:
  32.                 new_pos = (curr[0] - 1, curr[1])
  33.             else:
  34.                 new_pos = (curr[0], curr[1] - 1)

  35.             if new_pos not in visited:
  36.                 visited.add(new_pos)
  37.                 if robot.move():
  38.                     self.dfs(robot, visited, curr, new_pos)

  39.         if prev is not None:
  40.             tmp_diff = (prev[0] - curr[0], prev[1] - curr[1])
  41.             if tmp_diff == (1, 0):
  42.                 while self.direction != 2:
  43.                     robot.turnleft(1)
  44.                     self.direction = (self.direction + 1) % 4

  45.                 robot.move()
  46.             elif tmp_diff == (0, 1):
  47.                 while self.direction != 3:
  48.                     robot.turnleft(1)
  49.                     self.direction = (self.direction + 1) % 4

  50.                 robot.move()
  51.             elif tmp_diff == (-1, 0):
  52.                 while self.direction != 0:
  53.                     robot.turnleft(1)
  54.                     self.direction = (self.direction + 1) % 4

  55.                 robot.move()
  56.             else:
  57.                 while self.direction != 1:
  58.                     robot.turnleft(1)
  59.                     self.direction = (self.direction + 1) % 4

  60.                 robot.move()
复制代码
回复

使用道具 举报

🔗
merci 2018-4-7 05:08:29 | 只看该作者
全局:
第一题不可能有环吧? 上下级关系是不是应该都是树形关系我感觉,好像有环不太符合常识?还是面试官提到了可能有环?
回复

使用道具 举报

🔗
 楼主| sth830 2018-4-7 05:10:56 | 只看该作者
全局:
会有环,举个例子,a是b的上司,b是c的上司,但是a也是c的直接上司
回复

使用道具 举报

🔗
zec 2018-4-7 05:44:31 | 只看该作者
全局:
sth830 发表于 2018-4-7 05:10
会有环,举个例子,a是b的上司,b是c的上司,但是a也是c的直接上司

当成有向图来处理就没有环了吧
回复

使用道具 举报

🔗
 楼主| sth830 2018-4-7 05:54:07 | 只看该作者
全局:
zec 发表于 2018-4-7 05:44
当成有向图来处理就没有环了吧

请问怎么做呢?
回复

使用道具 举报

全局:
机器人,使用random方向,记录visited,eventually visited all cells.
回复

使用道具 举报

🔗
bambloo 2018-4-7 06:57:43 | 只看该作者
全局:
sth830 发表于 2018-4-7 05:54
请问怎么做呢?

提供一个思路,用hashmap建树,然后用dp做
回复

使用道具 举报

🔗
 楼主| sth830 2018-4-7 06:59:11 | 只看该作者
全局:
bambloo 发表于 2018-4-7 06:57
提供一个思路,用hashmap建树,然后用dp做

能不能大概写一下代码?我还是不理解,我试过了用dfs + dp来做,但是一旦图里有环就做不了
回复

使用道具 举报

🔗
bambloo 2018-4-7 08:31:46 | 只看该作者
全局:
sth830 发表于 2018-4-7 06:59
能不能大概写一下代码?我还是不理解,我试过了用dfs + dp来做,但是一旦图里有环就做不了

你的问题就是用了无向图,用hashmap可以建有向图(其实二维数组也可以,不过需要输入都是数字),代码有空写吧,我觉得跟微软某年的预科生笔试题有点像,场景是酒会,然后是直属上司来了只能喝自己酒量的一半什么的,求最大酒量
回复

使用道具 举报

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

本版积分规则

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