判断两个区间有无交集

454 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

场景:经常会有判断价格区间或路线长度区间的问题,这种问题转换为代码问题就是判断两个区间是否有交集

若有两个区间,分别为A[a1, a2],B[b1, b2],要求a1 < a2,b1 < b2

如何判断两区间之间有交集

正向思维:考虑所有相交的情况

集合A和集合B一共有四种位置关系,考虑时将A当作移动的区间,B的位置固定不动,可更加清晰,他们的位置情况分别为:

1.尾交:A的尾部落在B内

此时在数轴上的情况为:a1, b1, a2, b2

python代码书写为:

b1 < a2 < b2

2.包含:A完全包含B

此时在数轴上的情况为:a1, b1, b2, a2

python代码书写为:

a1 > b1 and a2 > b2

3.首交:A的头部落在B内

此时在数轴上的情况为:b1, a1, b2, a2

python代码书写为:

b1 < a1 < b2

4.被包含:B完全包含A

此时在数轴上的情况为:b1, a1, a2, b2,

python代码书写为:

a1 > b1 and a2 < b2

注:第四种被包含的情况,若实际情况下,只要A的一个端点落在B内,便存在交集的情况,若只是判断两个区间是否有交集,可以不写这块的代码,但用作其他用处,就需要把该情况考虑进去。

逆向思维:考虑不相交的情况

集合A和集合B一共有两种位置关系,考虑时将A当作移动的区间,B的位置固定不动,他们的位置情况分别为:

1.A完全落在B左边

此时在数轴上的情况为:a1, a2, b1, b2

python代码书写为:

a2 < b1

2.A完全落在B右边

此时在数轴上的情况为:b1, b2, a1, a2

python代码书写为:

a1 > b2

结语:以上便是区间是否存在交集的所有情况,是我自己按照我所使用的实际场景的理解,若有不对的地方,请批评指正。