请教一个关于数组之间比较大小的算法,有点复杂


$arr1 = [0=>'8',1=>'17',2=>'23',3=>'22',4=>'25',5=>'30',6=>'42'...];
$arr2 = [[0=>'12',1=>'15'],[0=>'24',1=>'28'],[0=>'17',1=>'25',[0=>'29',1=>'33']...];

        // arr2 里面每个的二维数组代表一个区间,即arr2[0][key[0]-key[1]] 代表 arr2[12-15](arr2[12,13,14,15])...
        // 算法需要满足3个条件
        //1.arr1 里面的任意一个值不可以在 arr2[[key][0]-[key][1]]区间内 比如:arr1[2] 必须不在任意arr2[key][0]-arr2[key][1]中
        // arr1中的第一个元素8 不在arr2的所有数组区间内 第五个元素25在arr2[1]内不满足条件,程序终止return错误
        //2.arr2中的每个数组区间均无交集 如arr2[1]的区间为24-28,但arr2[2]区间为17-25 所以中间有交集,程序终止return错误
        //3.arr2中的每个数组arr2[key][0]必须小于arr2[key][1]
        //请教大佬们一个php可以满足这三个条件的算法  
算命的码农。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

算法要求都清晰明了,不知道为什么写不出来?无非就是麻烦点

function a($arr1, $arr2){
    //条件1 把arr1转换成和arr2一样的格式,下标0和1相同
    $arr = [];
    foreach($arr1 as $a){
        $arr[] = [$a, $a];
    }
    //把上面生成的数组条添加进arr2里
    $arr2 += $arr;
    $arr2_amount = count($arr2);
    for($i = 0; $i < $arr2_amount; $i++){
        $min = $arr2[$i][0];
        $max = $arr2[$i][1];

        //条件3 必须按大小存储
        if($min > $max){
            return false;
        }

        //条件2 不重叠,不需要从头比较,也不需要和自己比较,故从i+1开始
        for($j = $i + 1; $j < $arr2_amount; $j++ ){
            $current = $arr2[$j];
            if($current[0] <= $min && $min <= $current[1]){
                return false;
            }
            if($current[0] <= $max && $max <= $current[1]){
                return false;
            }
        }
    }

    return true;
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!