【发布时间】:2016-05-17 19:47:50
【问题描述】:
给定两个列表,每个列表包含 N 个区间(数轴的子集),每个区间都有起点和终点的形式。一个列表中有多少对这些区间包含另一个列表中的区间?
例如:
如果列表 A 是 {(1,7), (2,9)} 而列表 B 是 {(3,6), (5,8)}
那么 A 的区间包含 B 中的区间的对数将是 3 对:
(1,7),(3,6)
(2,9)(3,6)
(2,9)(5,8)
目标是为 O(n log n) 射击。
我目前的算法是先按 x 坐标排序并将其作为一个列表。然后按 y 坐标对列表进行排序,并计算两个列表之间的倒数。但我的问题是为什么这行得通?任何见解将不胜感激。
我目前的可视化方式是以下几何方式(其中每条线的交点都是 num 反转的计数):
注意:我不确定如何检查列表列表中的反转。只是试图获得一种可以给出 O(n log n) 的方法。如果有任何其他方法很乐意听取建议。
【问题讨论】:
标签: algorithm optimization intervals divide-and-conquer inversion