1. 程式人生 > >判斷兩個區間有無交集

判斷兩個區間有無交集

有兩個區間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 "無交集"
}