最近我遇到了一个有趣的问题:
给定两个区间列表,找出这两个列表中所有重叠区间的总数。
Example
L1: ([1,2][2,3][4,5][6,7])
L2: ([1,5][2,3][4,7][5,7])
[1,5] overlaps [1,2] [2,3] [4,5]
[2,3] overlaps [1,2] [2,3]
[4,7] overlaps [4,5] [6,7]
[5,7] overlaps [4,5] [6,7]
total = 3+2+2+2 = 9
很显然暴力的方法是可行的,但速度太慢了(我需要比O(n^2)更好的方法)。
我也在这里找到了一个类似的问题(链接)。但它并不完全相同……
非常感谢任何帮助。
O(n²)
的时间复杂度,因为你需要总和,所以实际上要使用所有组合的信息,而组合的数量是n²
。如果列表中有很多重复项,或者可能存在其他可以利用的模式,那么也许你可以显著减少其中一个或两个n
,但仅此而已。 - MicroVirus