判斷兩個區間有無交集
阿新 • • 發佈:2019-02-15
有兩個區間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 "無交集"
}