慕姐4208626
2018-11-22 18:13:26
判斷一段時間與一堆一段時間之間是否有交集。有與起止時間相同的判斷為有交集如判斷 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; } } }這能解決問題,但是求更優的方法,最小的時間復雜度
1 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
public function inter(){
$tar=[6,4];
if($tar[0]>$tar[1]){
$temp=$tar[0];
$tar[0]=$tar[1];
$tar[1]=$temp;
}
$all=[
[5,6],
[7,9],
[1,4],
[3,1],
[1,3],
[8,7]
];
//排序
foreach ($all as &$v){
if($v[0]>$v[1]){
$temp=$v[0];
$v[0]=$v[1];
$v[1]=$temp;
}
}
foreach ($all as $k=>$v){
$left=$tar[0]>$v[1];
$right=$v[0]>$tar[1];
if(!($left||$right)){
var_dump($v);
}
}
}
添加回答
舉報
0/150
提交
取消