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

狗家电面

 
🔗
yiliaobailiao 2021-2-10 09:03:19 | 只看该作者
全局:
本帖最后由 yiliaobailiao 于 2021-2-10 09:11 编辑
匿名者 发表于 2021-2-10 06:33
如果找左右两个bucket,是否得对bucket进行排序,或者用priority quene呢,这样的话又变成nlogn的了

bucket的顺序是固定的。首先找到min和max的值。这样的话,buckets就是[min, min + k), [min + k, min + 2k), ..., [max - k, max + 1)。我们只关心落到每个bucket里面的数字的范围,而不关心同一个bucket里面的相对顺序。buckets[j] can be merged with buckets[j + 1] if max(buckets[j]) + k >= min(buckets[j + 1]).

评分

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

查看全部评分

回复

使用道具 举报

🔗
yiliaobailiao 2021-2-10 09:06:00 | 只看该作者
全局:
workworkhard 发表于 2021-2-10 06:38
明白了!感谢大神 是我理解错题意了

不敢当不敢当。。

评分

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

查看全部评分

回复

使用道具 举报

🔗
workworkhard 2021-2-10 13:04:22 | 只看该作者
全局:

不过我后来又想 能不能merge K次
比如 x,x+1,x-1 union
x,x+2,x-2 merge
...
以此类推
这样如果K不是很大的时候  时间复杂度应该是优于O(N2)的?

评分

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

查看全部评分

回复

使用道具 举报

🔗
Tdvxufnek 2021-2-10 14:49:11 | 只看该作者
全局:
gyzdmgqy 发表于 2021-2-10 06:16
这部分还是不是太懂,能否举例展开说说"应该先拿数字扫,最后再变成区间。。。"非常感谢哈

原来你是送米王 你说了算


  1. def find_group(numbers, k):
  2.     idx = 0
  3.     number_index = dict()
  4.     sorted_numbers = sorted(numbers)

  5.     for i, number in enumerate(sorted_numbers):
  6.         if i != 0 and number - sorted_numbers[i - 1] > k:
  7.             idx += 1
  8.         number_index[number] = idx

  9.     ans = [[] for i in range(idx + 1)]
  10.     for number in numbers:
  11.         ans[number_index[number]].append(number)
  12.     return ans
复制代码

评分

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

查看全部评分

回复

使用道具 举报

🔗
山泉123 2021-2-11 11:37:58 | 只看该作者
全局:
第二题UnionFind可以吧,先排序,扫一遍,如果相邻差别 <=k, 就把这两个 union 起来

评分

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

查看全部评分

回复

使用道具 举报

🔗
BenoitCJTV 2021-2-11 18:04:55 | 只看该作者
全局:
你好,能说一下题号吗? 积分太低了,看不到
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-UDI3X  2021-2-12 00:58:31
楼下有小伙伴要求提供题号,实在抱歉这两题都没找到相似的原题所以无法贴题号,抱歉哈
回复

使用道具 举报

🔗
changfu24 2021-2-12 05:10:40 | 只看该作者
全局:
匿名者 发表于 2021-2-10 06:26
timeline 就是每两个月投3个狗家的职位 投了1年了 基本已经放弃了 压根没指望狗家回复 结果recruiter就找 ...

加油!!!谢谢楼主分享

评分

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

查看全部评分

回复

使用道具 举报

🔗
xiana406 2021-2-12 18:05:17 | 只看该作者
全局:
感谢分享,楼里大神真多。总结下想法就是:应用排序,首先按照从小到大的顺序排序O(nlogn), 然后相邻的如果差值小于k 那就联合,线性。联合查找用路径压缩和秩排序的uf类就行。最后查询一次即可。时间复杂度O(nlogn)。如果想要继续降低复杂度,主要就是排序带来的O(nlogn)那么可以采用桶排序,一次遍历找到最小值和最大值,然后用宽度k来分割形成桶。数组依次遍历划分到对应的桶。桶内肯定属于一个group 每个桶与相邻的桶(或者右侧的桶)进行试图合并,做完也是线性复杂度。最终事件复杂度O(N)

评分

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

查看全部评分

回复

使用道具 举报

🔗
hjldtc 2021-2-13 04:24:16 | 只看该作者
全局:
Tdvxufnek 发表于 2021-2-7 15:23
第二题也可以这样做

首先把乱序数组里面的每个 number x, 变成 [x - k, x + k] 的 range

不行呀 [2,5,8] k = 2
range: [[0,4],[3,7],[6,10]]
那不就所有数字都到一个range里面去了?

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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