查看: 2432| 回复: 9
跳转到指定楼层
上一主题 下一主题
收起左侧

两道interval相关的题求教

全局:

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

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

x
lz最近刷面经的时候看到一道题:
Given a set of (start, end) pairs of timestamps where end > start, write an algorithm to return the smallest set of disjoint intervals containing every pair of (start, end) in the original set. 类似类似



类似这种区间重叠的题目感觉一直没有很好的思路,比如要用什么样的数据结构去保存这些区间以便之后的查询。


还有一道是square的面经题,也是类似的区间问题, 具体可以参考一下链接:

http://www.1point3acres.com/bbs/thread-143209-1-1.html

如果大家有什么比较好的思路和建议,希望可以共同讨论一下

上一篇:G家面经求指导
下一篇:最近有没有准备qumolo 电面的小伙伴,一起交流下!!
推荐
staycrazy 2016-2-12 07:47:49 | 只看该作者
全局:
一般来说,interval的题目如果不是特别难的,就是:
1. 按照end/start排序,然后greeeeeeeedy
2. 拆开end/start,纷纷变成event({event: start, time: xxx}),然后按照time排序,然后依次处理event

回复

使用道具 举报

🔗
helloc93 2016-2-12 05:05:09 | 只看该作者
全局:
同问~~很怕interval的题 有比较好的资料可以参考吗
回复

使用道具 举报

🔗
 楼主| MCwong 2016-2-12 13:16:44 | 只看该作者
全局:
staycrazy 发表于 2016-2-12 07:47
一般来说,interval的题目如果不是特别难的,就是:
1. 按照end/start排序,然后greeeeeeeedy
2. 拆开end ...

同意,一些简单的区间操作可以排序+greedy, 然而如果是像第二题那种,需要维护重合部分的状态,greedy就不怎么行的通了, 那个帖子也有讨论用map来存状态的, 然而好像依然不是面试官满意的解
回复

使用道具 举报

🔗
staycrazy 2016-2-12 14:54:19 | 只看该作者
全局:
本帖最后由 staycrazy 于 2016-2-12 15:02 编辑
MCwong 发表于 2016-2-12 13:16
同意,一些简单的区间操作可以排序+greedy, 然而如果是像第二题那种,需要维护重合部分的状态,greedy就 ...

我当时没看第二题,第二题是类似RMQ,要求优update和query。每次query drop区间里最大的值,然后需要update这个区间到新的高度。

https://zh.wikipedia.org/wiki/%E ... C%E6%9F%A5%E8%AF%A2

https://www.topcoder.com/communi ... st-common-ancestor/

都是竞赛知识了。。。

回复

使用道具 举报

🔗
samuelling 2016-2-12 15:19:00 | 只看该作者
全局:
staycrazy 发表于 2016-2-11 15:47
一般来说,interval的题目如果不是特别难的,就是:
1. 按照end/start排序,然后greeeeeeeedy
2. 拆开end ...

请问一下怎么判断是根据start还是end排序呢?因为自己做leetcode的时候像meeting room 这类问题按照start和end分别排序都做了一遍,都是可以的。但是有的时候貌似只能按照start或者end,比如给你一个set of intervals,返回最多none overlapping intervals 的数量,这时候只能根据end 来排序才能得到正确结果。所以觉得这类问题非常混乱,希望听到你的解答~
回复

使用道具 举报

🔗
samuelling 2016-2-12 15:19:11 | 只看该作者
全局:
请问一下怎么判断是根据start还是end排序呢?因为自己做leetcode的时候像meeting room 这类问题按照start和end分别排序都做了一遍,都是可以的。但是有的时候貌似只能按照start或者end,比如给你一个set of intervals,返回最多none overlapping intervals 的数量,这时候只能根据end 来排序才能得到正确结果。所以觉得这类问题非常混乱,希望听到你的解答~
回复

使用道具 举报

🔗
staycrazy 2016-2-13 02:21:05 | 只看该作者
全局:
samuelling 发表于 2016-2-12 15:19
请问一下怎么判断是根据start还是end排序呢?因为自己做leetcode的时候像meeting room 这类问题按照start和 ...

按照start/end排序只影响你最后遍历时候的方向。两种办法没有本质区别,最后从前往后遍历或者从后往前遍历,总有一条走得通。

你说的non-overlapping,其实更加直观的解决方案是把所有start, end分开然后排序,一个count计数器,遇到start就count++,遇到end就count--,如果出现count == 1然后count--的情况,就是一个没有和任何其他interval overlap的interval。
回复

使用道具 举报

🔗
beer 2016-2-13 02:40:58 | 只看该作者
全局:
这是Merge Intervals吧?
我的思路是第一个作为prev,然后从第二个开始scan,依次用curr的start和prev的end比较,然后融合.
回复

使用道具 举报

🔗
samuelling 2016-2-13 04:53:12 | 只看该作者
全局:
staycrazy 发表于 2016-2-12 10:21
按照start/end排序只影响你最后遍历时候的方向。两种办法没有本质区别,最后从前往后遍历或者从后往前遍 ...

哦哦不过你说的后一种扫描线算法是只有在计算none overlapping的时候才用吗?平常merge/insert之类的就可以按照start/end 排序就可以了?感谢🙏
回复

使用道具 举报

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

本版积分规则

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