由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - LinkedIn 的一道onsite题
相关主题
请教一个数据结构题Apple iCloud 电面
关于heap问个merge interval的变体题
interval tree vs. merge intervals问个简单清楚的google题,但我不会...
Facebook第一轮电面面经区间合并题的两种变体?
问个算法题, 关于区间 overlap的G/F面经
Interval tree解法问道题
Merge Interval那道题求教一道软家面试题的最优解
insert interval 没必要二分吧M家
相关话题的讨论汇总
话题: interval话题: 节点话题: 插入话题: linkedin话题: 树结构
进入JobHunting版参与讨论
1 (共1页)
e********8
发帖数: 4
1
从网上看来的一道面经,不知道如何解最优,求大神指点。。。
给你一个java interface, 实现两个method,一个是void add interval(int from,
int to), 另一个是int getTotalLength()返回已有interval的总时间,当然,要考虑
overlapping。比如(1,5), (2, 6)的total length 是5.
不知道用什么样的data structure 去解决。
a******1
发帖数: 20
2
segment tree.
l*3
发帖数: 2279
3
考虑如何向不交的interval集合里面插入一个新的interval。
leetcode上的题。

【在 e********8 的大作中提到】
: 从网上看来的一道面经,不知道如何解最优,求大神指点。。。
: 给你一个java interface, 实现两个method,一个是void add interval(int from,
: int to), 另一个是int getTotalLength()返回已有interval的总时间,当然,要考虑
: overlapping。比如(1,5), (2, 6)的total length 是5.
: 不知道用什么样的data structure 去解决。

e********8
发帖数: 4
4
这样的话,可能需要维护一个sorted interval array,以他们的开始时间排序。每次
插入,都得O(n) 时间复杂度,会不会效率不高?

【在 l*3 的大作中提到】
: 考虑如何向不交的interval集合里面插入一个新的interval。
: leetcode上的题。

e********8
发帖数: 4
5
能不能展开介绍下。。。谢谢!

【在 a******1 的大作中提到】
: segment tree.
c*****m
发帖数: 271
6
如果https://leetcode.com/problems/insert-interval/的最好方法是O(N)的,那我觉
得也不会有O(logn)的方法了吧。不认为这题能用segment tree做,可能我对segment
tree的用法还不够了解

【在 e********8 的大作中提到】
: 这样的话,可能需要维护一个sorted interval array,以他们的开始时间排序。每次
: 插入,都得O(n) 时间复杂度,会不会效率不高?

l*3
发帖数: 2279
7
也不能简单理解为O(n),你可以用BST来存储interval,这样如果是要新添入一个
interval,就是O(log n),如果是要修改并合并之前k个interval,那确实需要 O(k
log n)的运算量,但是好处是做完你少了k个interval。我觉得总的来说,至少粗浅的
想,是不会有更好的数据结构了 (up to log complexity),因为看上去至少你总是
要维护若干个不相交的interval的,
比如如果你当前的interval是[0,1], [2,3], [4,5], [6,7] 这种,那看上去只能分别
存了,没有什么好的方法可以节省时间和空间代价。

【在 e********8 的大作中提到】
: 这样的话,可能需要维护一个sorted interval array,以他们的开始时间排序。每次
: 插入,都得O(n) 时间复杂度,会不会效率不高?

l*3
发帖数: 2279
8
我也不认为这种问题适合线段树来处理
线段树处理连续区间的问题比较好,区间断断续续的话感觉搞不动。
A***s
发帖数: 879
9
如果存在的 interval 不能合并成一个,返回的 totalLength 该怎么定义呢?
比如已有 (1,5) (6,7)

【在 e********8 的大作中提到】
: 从网上看来的一道面经,不知道如何解最优,求大神指点。。。
: 给你一个java interface, 实现两个method,一个是void add interval(int from,
: int to), 另一个是int getTotalLength()返回已有interval的总时间,当然,要考虑
: overlapping。比如(1,5), (2, 6)的total length 是5.
: 不知道用什么样的data structure 去解决。

r*******g
发帖数: 1335
10
我觉得这题就是Merge Intervals。两个办法,一个是bst维护独立的不同的interval,
每个node是一个interval,这个缺点是无法删除interval,因为interval已经被merge
在一起了,而且插入的code不好写,好处是,可以很快的获得TotalLength。另外一个
办法当然就是interval tree了,网上有详细方法,用最基本的interval tree就可以,
好处是,插入操作非常easy,坏处是,不同node之间其实可能会overlap,所以最后
merge的时候需要注意,merge的开销应该是O(N)吧。所以理论最快的是BST tree,但是
interval tree很容易写。
不知道segment tree怎么写。
r*******g
发帖数: 1335
11
如果已经sorted了,binary search就可以获得新的interval应该插入的位置,所以这
题确实可能考察的就是leetcode insert interval原题。

【在 e********8 的大作中提到】
: 这样的话,可能需要维护一个sorted interval array,以他们的开始时间排序。每次
: 插入,都得O(n) 时间复杂度,会不会效率不高?

w*******d
发帖数: 221
12
merge时用lazy delete+pointer会快很多,否则还是O(n)

【在 r*******g 的大作中提到】
: 如果已经sorted了,binary search就可以获得新的interval应该插入的位置,所以这
: 题确实可能考察的就是leetcode insert interval原题。

s********g
发帖数: 2
13
用bst, 每个节点存interval[low, high]。所要维护的属性是树里的父节点的low要
大于左子节点的high,父节点的high要小于右子节点的low。 每次插入新节点的时候比
较路径节点上的interval, 并且更新插入节点的low/high值. 比如输入节点为[1,5
], [7,9], [6,13], [4,7]。
插入第一个节点时,树结构为 [1,5];
插入第二个节点时,树结构为
[1, 5]
[7,9]
插入第三个节点时,树结构为
[1, 5]
[7, 9]
[6, 7] [9, 13]
[6, 13]与[7,9]比较的时候会裂变成两个节点:[6, 7], [9, 13]。
插入第四个节点时,树结构为
[1, 5]
[7, 9]
[6, 7] [9, 13]
[5, 6]
[4,7]与[1,5]比较的时候会变成[5,7];[5,7]与[6,7]比较的时候会变
成[5,6]
每次插入复杂度为o(logN), 最后算总长度,遍历一次树就行,复杂度为o(N). 这个解
法有点类似于skyline的bst解法, http://www.shadabahmed.com/blog/2013/04/24/skyline-algorithm-a-binary-tree-approach/. 不同的是 skyline 的线段有不同的高度,这里的险段的高度默认为1.
r*******g
发帖数: 1335
14
你这个方法好,每插入一个interval时候不需要merge node, 而是把interval本身分裂
成多段。
不过用bst的问题就是不能删除interval,还是只有interval tree才能删除interval。

5

【在 s********g 的大作中提到】
: 用bst, 每个节点存interval[low, high]。所要维护的属性是树里的父节点的low要
: 大于左子节点的high,父节点的high要小于右子节点的low。 每次插入新节点的时候比
: 较路径节点上的interval, 并且更新插入节点的low/high值. 比如输入节点为[1,5
: ], [7,9], [6,13], [4,7]。
: 插入第一个节点时,树结构为 [1,5];
: 插入第二个节点时,树结构为
: [1, 5]
: [7,9]
: 插入第三个节点时,树结构为
: [1, 5]

1 (共1页)
进入JobHunting版参与讨论
相关主题
M家问个算法题, 关于区间 overlap的
关于面试中interval tree的问题Interval tree解法
刷题看见这个blogMerge Interval那道题
请教这道题有没有比较efficient的方法insert interval 没必要二分吧
请教一个数据结构题Apple iCloud 电面
关于heap问个merge interval的变体题
interval tree vs. merge intervals问个简单清楚的google题,但我不会...
Facebook第一轮电面面经区间合并题的两种变体?
相关话题的讨论汇总
话题: interval话题: 节点话题: 插入话题: linkedin话题: 树结构