Arrays 验证数量范围数组最有效的方法是什么?
假设我有一个数量范围数组:Arrays 验证数量范围数组最有效的方法是什么?,arrays,validation,loops,numbers,range,Arrays,Validation,Loops,Numbers,Range,假设我有一个数量范围数组: [{min=1, max=500}, {min=2, max=1000}, ...] 验证范围不重叠的最有效方法是什么(上述方法将无法验证)?一个明显的方法是使用间隔树并逐个插入项目。那么检查就很简单了 另一种方法将更直接。您可以按字典顺序对数组进行排序,并保留最左侧的可用起始点。当一个新的间隔出现时,它必须在这一点之后开始(我们不介意间隙,因为数组已排序,间隙将不再被访问) 这两个都在O(N log N)time中运行。我不确定是否可以做得更好。非常好的解决方案。
[{min=1, max=500}, {min=2, max=1000}, ...]
验证范围不重叠的最有效方法是什么(上述方法将无法验证)?一个明显的方法是使用间隔树并逐个插入项目。那么检查就很简单了 另一种方法将更直接。您可以按字典顺序对数组进行排序,并保留最左侧的可用起始点。当一个新的间隔出现时,它必须在这一点之后开始(我们不介意间隙,因为数组已排序,间隙将不再被访问)
这两个都在
O(N log N)
time中运行。我不确定是否可以做得更好。非常好的解决方案。非常感谢。
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