1.可以暴力 拿每个区间和别的区间去比较 如果能合并的标记一下呀 下个区间就不用去比较了 复杂度n2
2.先按照区间的起始位置排序,把第一个元素压入结果集 循环数组 比较第i个区间和结果集的最后一个元素末位置大小关系,如果大于说明没交集 直接压入 小于等于 则合并区间
public function run()
{
$arr = [
[1,3],
[9,12],
[2,6],
[8,10],
[15,18],
[11,15],
];
usort($arr,array($this,'cmp'));
$cur = 0;
$res =[];
array_push($res,$arr[$cur]);
for($i=1;$i<count($arr);$i++){
if($arr[$i][0]<=$res[$cur][1]){
$res[$cur][1] = max($res[$cur][1],$arr[$i][1]);
}else{
array_push($res,$arr[$i]);
$cur++;
}
}
echo '<pre>';
print_r($res);
exit;
}
private function cmp($a,$b){
return $a[0]>$b[0];
}