判断两个区间有无交集

有两个区间A[a1,b1], B[a2,b2],判断这两个区间有没有交集。我们可以分为两种思维来判断:

1. 正向思维:判断所有相交的情况

/**判断所有可能相交的情况
  * 1. A[1,5], B[4,8] A尾部与B首部相交(b1端必须在[a2,b2]之间)
  * 2. A[1,5], B[2,4] A包含B(B的两个端点都位于A中)
  * 3. A[2,5], B[1,3] A首部与B尾部相交(a1端必须在[a2,b2]之间)
  * 4. A[4,5], B[1,8] A被包含于B (a1,b1端必须都在[a2,b2]之间)
  **/

//因为A的一个端点落在B中name就有交集,所以第四点可省略
if((b1>a2&&b1<b2) || (a1<a2&&b1>b2) || (a1>a2&&a1<b2)){
    return "有交集"
}else{
    return "无交集"
}

2. 逆向思维:判断所有不相交的情况

/**判断所有可能相交的情况
  * 1. A[1,2], B[3,4] A位于B前面(b1小于a2)
  * 2. A[3,4], B[1,2] A位于B后面(a1大于b2)
  **/

if((a1 < a2 && b1 < a2) || (b2 < a1 && a2 < a1)){
    return "无交集"
}else{
    return "有交集"
}

3. 优化逆向思维

/**
  *思路就是如果两个区间不相交,那么最大的开始端一定大于最小的结束端
  **/

if(max(a1, a2) < min(b1, b2)){
    return "有交集"
}else{
    return "无交集"
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值