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

asciinema一款优秀终端会话录制工具(13.2k stars)

asciinema是一个优秀的…

14分钟 ago

tldr pages一个linux命令帮助工具(48.5k stars)

tldr pages项目是一个…

29分钟 ago

Odoo一款开源ERP和CRM系统(34.6k stars)

Odoo是一套基于网络的开源商…

49分钟 ago

Seodity:提升SEO分析和内容创建

Seodity作为SEO分析的…

24小时 ago

SocialBee一款AI社交媒体内容生成器

SocialBee的AI帖子生…

24小时 ago

雪橇云VPN五一活动来了!全场15%的折扣!

雪橇云VPN一款是稳定全球多节…

1天 ago