我们说我有一系列数量范围:
[{min=1, max=500}, {min=2, max=1000}, ...]
验证范围不重叠的最有效方法是什么(上述方法将无法验证)?
答案 0 :(得分:2)
一种显而易见的方法是使用间隔树并逐个插入项目。那么检查将是微不足道的。
另一种方法会更直接。您可以按字典顺序对数组进行排序,并保持最左侧的可用起点。当一个新的时间间隔到来时,它必须在这一点之后开始(我们不介意这些差距,因为数组已经排序,而且差距永远不会再被访问)。
def validate(listoftuples):
rightedge = -10000000000000000 # some kind of minus infinity
listoftuples.sort()
valid = True
for l, r in listoftuples:
if l >= rightedge:
rightedge = r
else:
valid=False
break
return valid
validate([(1, 500), (2, 1000)]
>>> False
validate([(1, 2), (2, 1000)])
>>> True
这两个都在O(N log N)
时间内运行。我不确定能否做得更好。