Categories: PHP编程

一道百度算法面试题:区间集合合并

百度的面试过程中经常会出现现场算法的实现,这个算法可能是一个不负责的算法,考察现在编码的能力,所以不用担心,只有你冷静下来一定实现出来,记得一定要用自己最熟悉的语言。

以下这道区间合并算法题,来源一个朋友百度的一面:

给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

PHP编码实现:

<?php
//$data=[[1,3],[2,6],[8,10],[15,18]];
//$data = [[1,3],[2,6]];
//$data = [[1,4],[4,5]];
$data = [[1,10], [2,6]];

if (!is_array($data)|| empty($data)) {
    return [];
}
//filter array
$data = array_filter($data, function($item) {
       return !empty($item);
});

//sort array
usort($data, function($a, $b){
   return $a[0] > $b[0];
});

$resutls = [];
$current = array_shift($data);
while(!empty($data)) {
    $next = array_shift($data);
    list($curMin, $curMax) = $current;
    list($nextMin, $nextMax) = $next;
    if ($curMax >= $nextMin) {
        $current = [min($curMin, $nextMin), max($curMax,$nextMax)];
    } else {
       $results[] = $current; 
       $current = $next;
    }
}
$results[] = $current;
print_r($results);
5.0
01
shell脚本是什么
linux中的用户管理
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

都说PHP是最差的编程语言,为什么还有这么多公司在使用?

PHP是一门被广大开发者熟知的…

9小时 ago

2024 Google I/O大会放出AI大招 – 招招要友商的”命”

在谷歌年度开发者大会I/O的尾…

1天 ago

PHP Composer如何安装?

PHP Composer是PH…

3天 ago

MacOS上Missing xcrun的问题

在使用MacOS进行编程或开发…

3天 ago