求时间段之间的交集的最优解

判断一段时间与一堆一段时间之间是否有交集。有与起止时间相同的判断为有交集

判断 

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;

            }

        }

    }

这能解决问题,但是求更优的方法,最小的时间复杂度

慕姐4208626
浏览 571回答 1
1回答

牧羊人nacy

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);        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript