判断一段时间与一堆一段时间之间是否有交集。有与起止时间相同的判断为有交集如判断 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
提交
取消