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

facebook 二面题目求解题思路

🔗
emmarong 2016-3-12 13:35:45 | 只看该作者
全局:
这题就是LC上面的meeting rooms换了马甲。meeting rooms求最少需要多少个room,也就是某个时刻有几个并行的会议,这个题目求时刻有最大的并行interval数量,差不多,按照start time排一遍,再用一个heap放结束时间就可以了。贴个python版本的:

  1. import heapq
  2. def integraltimestamps2(intervals):
  3.     intvs = sorted(intervals, key = lambda x : x[0])
  4.     edges = sorted([intv[0] for intv in intervals]+[intv[1] for intv in intervals])
  5.     results = []
  6.     moccurs = 0
  7.     ongoing = []
  8.     intvid = 0
  9.     for e in edges:
  10.         if results and len(ongoing) == moccurs:
  11.             results += range(results[-1]+1,e)
  12.         while ongoing and e >= ongoing[0]:
  13.             heapq.heappop(ongoing)
  14.         while intvid < len(intvs) and e >= intvs[intvid][0]:
  15.             heapq.heappush(ongoing, intvs[intvid][1])
  16.             intvid += 1
  17.         if len(ongoing) > moccurs:
  18.             moccurs = len(ongoing)
  19.             results = [e]
  20.         elif len(ongoing) == moccurs:
  21.             results.append(e)
  22.     return results
复制代码
回复

使用道具 举报

🔗
Chi2829 2016-3-12 13:52:11 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| primbo 2016-3-12 21:48:05 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| primbo 2016-3-12 21:48:17 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| primbo 2016-3-12 21:49:04 | 只看该作者
全局:
Chi2829 发表于 2016-3-12 13:52
👍这个代码很简洁啊!没做过meeting room,但是这么看和skyline也很像!results可能还要去个重。 ...

研究出来了指导一下。
回复

使用道具 举报

🔗
andy_nie 2016-3-12 23:05:51 | 只看该作者
本楼:
全局:
分段数组!!!
回复

使用道具 举报

🔗
Chi2829 2016-3-12 23:49:24 | 只看该作者
全局:
Chi2829 发表于 2016-3-12 13:52
👍这个代码很简洁啊!没做过meeting room,但是这么看和skyline也很像!results可能还要去个重。 ...

写了个heap的python版本。求指导。
  1. import heapq

  2. def frequent_timestamp2(intervals):
  3.     intvs = sorted(intervals, key=lambda x: x[0])  # sort by starting time
  4.     endtimes = []  # a heap to keep end times
  5.     results = []
  6.     maxcnt, currcnt = 1, 0  # maximum overlap count and current overlap count
  7.     for i in range(len(intvs)):
  8.         newstart, newend = intvs[i]  # start and end time of a new interval
  9.         while endtimes and endtimes[0] <= newstart:
  10.             # while start time of curr interval >= smallest end time of an visited interval, pop the old endtime from heap and check count
  11.             oldend = heapq.heappop(endtimes)
  12.             if currcnt > maxcnt:
  13.                 results = range(intvs[i-1][0], oldend)
  14.                 maxcnt = currcnt
  15.             elif currcnt == maxcnt:
  16.                 results += range(intvs[i-1][0], oldend)
  17.             currcnt -= 1
  18.         heapq.heappush(endtimes, newend)  # push endtime of curr interval to heap
  19.         currcnt += 1
  20.     if currcnt > maxcnt:
  21.         results = range(intvs[-1][0], endtimes[0])
  22.     elif currcnt == maxcnt:
  23.         results += range(intvs[-1][0], endtimes[0])
  24.     return results
复制代码
回复

使用道具 举报

🔗
Chi2829 2016-3-13 00:00:39 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| primbo 2016-3-13 00:03:53 | 只看该作者
全局:
Chi2829 发表于 2016-3-13 00:00
他说的挺清楚的啊,我的写法和他细节有些小区别。

先对所有interval按照start time排序,得到排序后数 ...

亲,求给一个java或者c++的版本。
回复

使用道具 举报

🔗
Chi2829 2016-3-13 00:07:14 | 只看该作者
全局:
primbo 发表于 2016-3-13 00:03
亲,求给一个java或者c++的版本。

亲,你这不是难为我吗...转专业现在只会写写python。你当伪码看啊!
回复

使用道具 举报

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

本版积分规则

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