给定两个列表,每个列表包含 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) 的方法。如果有任何其他方法很高兴听到建议。