由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个题目,找不在区间内的所有数
相关主题
问个最近面试里的题目感恩发面经-Amazon第一轮电面
请教一道数据结构的设计题找第K个最小的元素
问个算法题贡献一个最近电面题目
google youtube interview, 莫名被拒。。。。。。问个算法题,修改版
求问个G家面试题请教一道题目
L家的高频题merge k sorted arrays giving iterators求讨论!请教一个DP的问题
a[i] + b[j] = c[k] 的题有靠谱的答案不?问个面试题
问一道面试题问几道算法题
相关话题的讨论汇总
话题: array话题: interval话题: 数组话题: iterate话题: integer
进入JobHunting版参与讨论
1 (共1页)
l**********9
发帖数: 537
1
有人做过这个题没有: 2个排序数组,数组1的元素是integer range, 例如 2-4, 5-9
。。。有start integer number,end interger number2个fields,按照先start
number排序,再end number排序,每个元素就是一个range。 第二个数组是integer
。 2个都是升序。 问找出第二个数组里面不在第一个数组所有range的所有元素
d*k
发帖数: 207
2
It can be solved by the 'classic' method.
There are three kinds of point:
1. The start points of an interval
2. The end points of an interval
3. The points in second array.
Put them into one array and sort it by increasing position. One detail: for
points with same position, use the order: type1 < type3 < type2
Iterate the sorted array and maintain on status: number of opening intervals
so far. Let's denote it as N.
Initially, N = 0.
For each point, if it's type1, let N = N + 1. If it's type2, Let N = N - 1.
If it's type3, that point is 'out of range' iff N is zero.
P.S.
In a Linux box and the CN input method is broken yet again....
e*******8
发帖数: 94
3
这个就是plane sweep的方法。因为输入已经排好序了,所以时间复杂度是O(n),n是
第一个数列的大小+第二个数列的大小

for
intervals

【在 d*k 的大作中提到】
: It can be solved by the 'classic' method.
: There are three kinds of point:
: 1. The start points of an interval
: 2. The end points of an interval
: 3. The points in second array.
: Put them into one array and sort it by increasing position. One detail: for
: points with same position, use the order: type1 < type3 < type2
: Iterate the sorted array and maintain on status: number of opening intervals
: so far. Let's denote it as N.
: Initially, N = 0.

l**********9
发帖数: 537
4
谢谢回复, 将它们merge到一个array时,是不是还需要记录它们的type?比如 2start
, 4end, 5, 6start, 9end ...? 因为iterate merged的数组的时候还需要判断是哪种
类型的。
不知道leetcode上面有没有类似的题目?

for
intervals

【在 d*k 的大作中提到】
: It can be solved by the 'classic' method.
: There are three kinds of point:
: 1. The start points of an interval
: 2. The end points of an interval
: 3. The points in second array.
: Put them into one array and sort it by increasing position. One detail: for
: points with same position, use the order: type1 < type3 < type2
: Iterate the sorted array and maintain on status: number of opening intervals
: so far. Let's denote it as N.
: Initially, N = 0.

z****e
发帖数: 54598
5
现在一看到这种题,第一想法就是有没有dp解
d*k
发帖数: 207
6
当然要记录类型。。。不是说了吗,排序的时候也得看类型。
leetcode好像有吧,记不清了。

2start

【在 l**********9 的大作中提到】
: 谢谢回复, 将它们merge到一个array时,是不是还需要记录它们的type?比如 2start
: , 4end, 5, 6start, 9end ...? 因为iterate merged的数组的时候还需要判断是哪种
: 类型的。
: 不知道leetcode上面有没有类似的题目?
:
: for
: intervals

R***Z
发帖数: 1167
7
想确认一下我对题的理解是否有误,这题中数组1是以下哪种形式?
A: {[start1, end1], [start2, end2], ...}
B: {start1, start2, ..., end1, end2, ...}

-9
integer

【在 l**********9 的大作中提到】
: 有人做过这个题没有: 2个排序数组,数组1的元素是integer range, 例如 2-4, 5-9
: 。。。有start integer number,end interger number2个fields,按照先start
: number排序,再end number排序,每个元素就是一个range。 第二个数组是integer
: 。 2个都是升序。 问找出第二个数组里面不在第一个数组所有range的所有元素

s****p
发帖数: 124
8
When you merge and sort, that can take O(nlogn), right? It is not linear
time algorithm.

for
intervals

【在 d*k 的大作中提到】
: It can be solved by the 'classic' method.
: There are three kinds of point:
: 1. The start points of an interval
: 2. The end points of an interval
: 3. The points in second array.
: Put them into one array and sort it by increasing position. One detail: for
: points with same position, use the order: type1 < type3 < type2
: Iterate the sorted array and maintain on status: number of opening intervals
: so far. Let's denote it as N.
: Initially, N = 0.

e*******8
发帖数: 94
9
不用直接排序啊(因为题目是说已经排好序之后怎么做)。不知道这步按照结束时间排
序是做什么,觉得好象没必要?要是可以单按照start time一个一个处理每个range,
我觉得算法
就是leetcode上的jump game + merge sort中merge两个排好序的数组。

【在 s****p 的大作中提到】
: When you merge and sort, that can take O(nlogn), right? It is not linear
: time algorithm.
:
: for
: intervals

s*w
发帖数: 729
10
用 hashtable 应该是最好理解的了
for interval in array 1:
for value in interval:
hashtable.insert(value)
for int in array 2:
if hashtable.count(int)==0:
output
唯一的缺点是第二行可能比较慢,看共有多少 unique value

-9
integer

【在 l**********9 的大作中提到】
: 有人做过这个题没有: 2个排序数组,数组1的元素是integer range, 例如 2-4, 5-9
: 。。。有start integer number,end interger number2个fields,按照先start
: number排序,再end number排序,每个元素就是一个range。 第二个数组是integer
: 。 2个都是升序。 问找出第二个数组里面不在第一个数组所有range的所有元素

相关主题
L家的高频题merge k sorted arrays giving iterators求讨论!感恩发面经-Amazon第一轮电面
a[i] + b[j] = c[k] 的题有靠谱的答案不?找第K个最小的元素
问一道面试题贡献一个最近电面题目
进入JobHunting版参与讨论
s****p
发帖数: 124
11
Array 1 is sorted by range, if r1 < r2, it could be that r1.upper > r2.lower
. So when you merge lower and upper into the same array, it still need to be
sorted.

【在 e*******8 的大作中提到】
: 不用直接排序啊(因为题目是说已经排好序之后怎么做)。不知道这步按照结束时间排
: 序是做什么,觉得好象没必要?要是可以单按照start time一个一个处理每个range,
: 我觉得算法
: 就是leetcode上的jump game + merge sort中merge两个排好序的数组。

p*****2
发帖数: 21240
12
如果把第一个merge的话是O(n), 然后找的话就是O(logn)了吧?
e*******8
发帖数: 94
13
所以我才觉得不用按照finish time排序呀:要是单按照start time排序, events就只
是第一个array里的start time和第二个array里的点:依此扫描每个events (用merge
sort里merge两个sorted array的方法):如果是start time,就检查是否可以向右扩
展被intervals覆盖的范围,然后相应的更新最大可以覆盖的范围;如果是第二个array
里的点,就检查是不是在当前被覆盖的范围内。
比如如果输入是[1,4], [2,5], [7,9],[8,10],第二个
array的点是5,6,那么:
第一个event at 1:当前覆盖的范围是[1,4]
第二个event at 2:当前覆盖的范围是[1,5]
第三个event at 5:5被覆盖
第四个event at 6:6没有被覆盖;
第五个event at 7:当前覆盖的范围是[7,9]
第六个event at 8:当前覆盖的范围是 [7,10]
最后输出是{6}。
r*********n
发帖数: 4553
14
这种题目一看就知道对方想考察的是binary search的变体
描述算法比较verbose,这里给个例子
interval array A: [{1, 3}, {3, 4}, {7, 12}, {9, 10}] //按照[1, 3, 7, 9]来排
的顺
integer array B: [4, 5, 10]
1. binary search (actually upper_bound) B[0] = 4 in A: get i = 2 (if A[i]==
4,then ++i)
2. iterate through A[0, ..., i-1] until you find the first index j such that
its end time is >= 4: j = 1
3. because j < i, 4 is contained in an interval
4. binary search B[1] = 5 in A: get i = 2
5. iterate through A[j, ..., i-1] (j = 1) until you find the first index
such that its end time is >= 5: j = 2
6. because j == i, 5 is not contained in an interval
7. binary search B[2] = 10 in A: get i = 4
8. iterate through A[j, ..., i-1] (here j = 2)...... end time is >= 10: j =
2
9. because j < i, 10 is contained in A
because j is non-decreasing, iteration step (above 2, 5, 8) takes O(n), each
binary search takes O(logn), total running time is O(nlogn)
c********p
发帖数: 1969
15
先mark
1 (共1页)
进入JobHunting版参与讨论
相关主题
问几道算法题求问个G家面试题
问一道在sorted array里search的问题L家的高频题merge k sorted arrays giving iterators求讨论!
请教一个题目a[i] + b[j] = c[k] 的题有靠谱的答案不?
菜鸟问个two sum的变型题问一道面试题
问个最近面试里的题目感恩发面经-Amazon第一轮电面
请教一道数据结构的设计题找第K个最小的元素
问个算法题贡献一个最近电面题目
google youtube interview, 莫名被拒。。。。。。问个算法题,修改版
相关话题的讨论汇总
话题: array话题: interval话题: 数组话题: iterate话题: integer