楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

狗家电面

 
地里匿名用户
🔗
匿名用户-UDI3X  2021-2-10 02:53:35
yiliaobailiao 发表于 2021-2-9 23:31
能问一下第一题的输入格式吗?为啥要用分治法呢?

这题的输入格式如下(我就用python来表示了哈):
{'Bob': ['Peter','Mary'],'Mary':['Jim'], 'Peter':[],'Jim':[]}
其中key是老板,value是直属员工的list
需要返回指定人所有直系和间接员工的总数,我当时是写递归分治,每个人return他每个下属的下属个数的总和,有点像返回一个树节点下面所有的子节点的个数。如果有其他思路很欢迎大神分享,我们可以学习一下。

评分

参与人数 1大米 +3 收起 理由
yiliaobailiao + 3 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
huali0415 2021-2-10 03:17:06 | 只看该作者
全局:
第二题有着非常明显的谷歌风格,比较考察candidate的算法基本功,我觉得是个好题,默默记录下来哈哈

评分

参与人数 1大米 +2 收起 理由
gyzdmgqy + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
yiliaobailiao 2021-2-10 05:36:57 | 只看该作者
全局:
huali0415 发表于 2021-2-10 00:59
1,把数字全部装进buckets(hashmap即可)
2,从每个bucket出发进行dfs,每次去找左、右相邻的两个bucke ...

明白了。每个bucket的size应该是k,数字对k取模之后放入对应的bucket,然后更新每个bucket的最大值和最小值。这样,相邻的buckets就可以根据最大值和最小值的差来判断是不是能够合并。这样的话,其实跟楼主的思路差不多了,只不过是另外一种sort,不需要关注每个bucket里面的情况。空间还是要多用一些。也还是需要记录原来数据的位置。

评分

参与人数 2大米 +3 收起 理由
linyuhuai1993 + 1 给你点个赞!
gyzdmgqy + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
changfu24 2021-2-10 05:47:43 | 只看该作者
全局:
请问楼主投的timeline是怎么样的?谢谢

评分

参与人数 1大米 +2 收起 理由
gyzdmgqy + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
shanewww 2021-2-10 05:55:38 | 只看该作者
全局:
排序还是最简单直接的办法,想要比排序还快的话 边扫描边merge也不是不行, 但是merge的时候要找相邻的buckets, 而且要判断新加入的这个number会不会扩展bucket的界限,不一定是merge一次完事儿了,代码会比较复杂,可读性也会降低。(当然大牛可以无视这些)

排序的话只需要从最小的数字一个个看下去,只要在 current number + k 的范围内,就放在同一个bucket,不在的话就开始往一个新的bucket里放。

  1. def find_group(numbers: List[int], k: int):
  2.     sorted_numbers = sorted(numbers)
  3.     groups = []
  4.     ind = 0
  5.     while ind < len(sorted_numbers):
  6.         right = ind
  7.         while right < len(sorted_numbers) and sorted_numbers[right] <= sorted_numbers[ind]+k:
  8.             right += 1
  9.         groups.append(sorted_numbers[ind: right])
  10.         ind = right
  11.     return groups
复制代码

评分

参与人数 2大米 +5 收起 理由
bryanjhy + 3 给你点个赞!
gyzdmgqy + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
gyzdmgqy 2021-2-10 06:16:53 | 只看该作者
全局:
Tdvxufnek 发表于 2021-2-9 18:33
海牙,大意了,不应该把value直接变成区间的,应该先拿数字扫,最后再变成区间,感谢提醒!

这部分还是不是太懂,能否举例展开说说"应该先拿数字扫,最后再变成区间。。。"非常感谢哈
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-UDI3X  2021-2-10 06:26:39
changfu24 发表于 2021-2-10 05:47
请问楼主投的timeline是怎么样的?谢谢

timeline 就是每两个月投3个狗家的职位 投了1年了 基本已经放弃了 压根没指望狗家回复 结果recruiter就找上门了,这只是电面,后面的interview还没约好,感觉最近recruiter特别忙,我和他约的聊下一轮面试的meeting都约到三月份去了,之前他说他没空,感觉他们家重来不愁candidates, 唉,天地不仁,以万物为刍狗。。。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-UDI3X  2021-2-10 06:31:37
shanewww 发表于 2021-2-10 05:55
排序还是最简单直接的办法,想要比排序还快的话 边扫描边merge也不是不行, 但是merge的时候要找相邻的buck ...

但是此题还要求最后返回的list里每个group里面数字的原始相对顺序不变,排序的话就打乱了,我当时是强行开tuple记录(order,value),先按value 排序,小组内按order排序。记得当时和面试官聊得时候她对我的算法想了很长时间,最后弄明白是可以work的,感觉她的optimal solution不是这个,而且她原本还打算出另外一题,结果我这题整的太复杂就来不及了。很想知道是否有更简单的写法。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-UDI3X  2021-2-10 06:33:15
huali0415 发表于 2021-2-10 00:59
1,把数字全部装进buckets(hashmap即可)
2,从每个bucket出发进行dfs,每次去找左、右相邻的两个bucke ...

如果找左右两个bucket,是否得对bucket进行排序,或者用priority quene呢,这样的话又变成nlogn的了
回复

使用道具 举报

🔗
workworkhard 2021-2-10 06:38:06 | 只看该作者
全局:
yiliaobailiao 发表于 2021-2-9 22:32
这个题目的要求是“差值小于k”,并不是“等于k”。所以只查询+k, -k两个值是不够的。

明白了!感谢大神 是我理解错题意了

评分

参与人数 1大米 +2 收起 理由
gyzdmgqy + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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