判斷一段時間與一堆一段時間之間是否有交集。有與起止時間相同的判斷為有交集
如
判断
12:30:00--14:20:00
与下列时间段是否有交集
10:00:00-12:00:00, 12:10:00-12:50:00 , 14:30:00-15:00:00
轉換為時間戳然後一一循環比較
function is_cross($st1, $et1, $st2, $et2)
{
$status = $st2 - $st1;
if ($status > 0) {
$status2 = $st2 - $et1;
if ($status2 >= 0) {
return false;
} else {
return true;
}
} else {
$status2 = $et2 - $st1;
if ($status2 > 0) {
return true;
} else {
return false;
}
}
}
這能解決問題,但是求更優的方法,最小的時間複雜度
公用函數 inter(){
雷雷將時間轉換為時間戳,然後-------對比。
如果這個
一堆一段時間
需要被多次使用: 可以用線段樹。一次使用時"一一對比"也不會更慢。python版本,js應該也是一樣的
雷雷
這樣可以從periods挑出和period有交集的時間段。
把時間轉換為整數123000, 反向判斷
a -- b
c -- d
這兩個時間段,在什麼情況下沒有交集
b
a > d