给出3个区间(a,b),(c,d),(e,f),如果存在相同的值t,则检测的最快方式是什么(即有/无答案)时间a<=t<b AND c<=t<d AND e<=t<f ?
是否也可以计算满足此条件的t的范围min(t),max(t)
?
此外,是否可以在没有任何关于订单的假设的情况下做同样的事情? (也可以是b<a
或a<b
)
我已经为两个细分市场找到了一个众所周知的解决方案,但三个细分市场并不是一件容易的事。
欢迎使用任何js或python示例代码。
编辑:纠正条件要求
答案 0 :(得分:1)
Python解决方案的任意数量的间隔。它会返回True, min t value, max t value
或False, t value, t value
。
def in_interval(intervals):
if len(intervals) == 0:
return False, None, None
min_t = min(intervals[0])
max_t = max(intervals[0])
for interval in intervals[1:]:
min_t = max(min_t, min(interval))
max_t = min(max_t, max(interval))
if min_t > max_t:
return False, None, None
else:
return True, min_t, max_t
试运行:
>>> intervals = [(6,1),(2,20),(8,7)]
>>> in_interval(intervals)
(False, 1, 1)
>>> intervals = [(6,1),(2,20),(4,9)]
>>> in_interval(intervals)
(True, 4, 6)
答案 1 :(得分:0)
def order(ab):
(a, b) = ab
if a is None or b is None: return None
if a>b:
return (b,a)
else:
return (a,b)
def order2(ab, cd):
if ab is None or cd is None: return None
(a, b) = order(ab)
(c, d) = order(cd)
if a <= c:
return (ab, cd)
else:
return (cd, ab)
def intersect(ab, cd):
if ab is None or cd is None: return None
((a, b), (c,d)) = order2(ab, cd)
if b <= c:
return None
if d < b:
return (c, d)
else:
return (c, b)
def intersect_of_three(ab, cd, ef):
return intesect(intersec(ab, cd), ef)
答案 2 :(得分:0)
我的第一个解决方案是对范围进行排序,以便将[x,y]
形式的所有间隔都设为x<y
。
然后我计算
overlap_x=max(a,c,e)
overlap_y=min(b,d,f)
当且仅当
时才存在完全重叠overlap_x<overlap_y
其中overlap_x和overlap_y是重叠范围的边界。
您知道是否有更快的解决方案需要更少的操作吗?