[路飞]_leetcode-56-合并区间

简介: leetcode-56-合并区间

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战


[题目地址][B站地址]


以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。


示例 1:


输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
复制代码


示例 2:


输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
复制代码



提示:


  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104


解题思路


本题需要我们将发生重叠的区间进行合并,并返回一个不重叠的区间数组。


这里我们可以首先对输入数组的子数组按照开始值进行升序排序,这样就保证了前面区间的开始值一定小于等于后面区间的开始值。


此时我们只需要判断如果前面区间的结束值大于等于后面区间的开始值,则说明两个区间发生了重叠,合并两个区间即可。 遍历排序后的输入数组,按照以上逻辑进行判断合并,数组遍历完成,就得到了合并后的结果数组。


动画演示


网络异常,图片无法展示
|


代码实现


var merge = function (intervals) {
  // 特判如果输入数组长度为1,直接返回
  if (intervals.length === 1) return intervals
  // 对输入数组按照子数组区间开始值升序排序
  intervals.sort((a, b) => a[0] - b[0])
  // 获取输入数组长度
  const len = intervals.length,
    // 初始化结果数组
    res = []
    // 记录待合并区间的开始值的最小值和结束值的最大值
    let [min,max] = intervals[0],
    // 初始化查找指针
    tail = 1;
  while (tail < len) {
    // 如果当前子区间的开始值小于等于之前区间结束值的最大值,则可以合并
    while (tail < len && intervals[tail][0] <= max) {
      // 尝试更新区间结束值的最大值
      max = Math.max(max, intervals[tail][1])
      // tail 指针后移一位
      tail++
    }
    // 当找不到可以继续合并的区间
    // 根据当前待合并区间的开始值的最小值和结束值的最大值组成合并区间并插入结果数组
    res.push([min, max])
    // 更新待合并区间的开始值的最小值和结束值的最大值
    if (tail < len) {
      [min,max] = intervals[tail]
    }
  }
  // 返回结果数组
  return res
}
复制代码


这里在编码过程中,我们利用了一个小技巧,我们利用一个指针向后查找可以合并的区间,直到无法再找到可合并区间为止,此时再进行区间的合并,这样就减少了多次区间合并的开销。


至此我们就完成了 leetcode-56-合并区间


如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻

相关文章
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
642 4
题目----who is the killer?
题目----who is the killer?
123 1
|
Linux Shell
Linux命令(71)之unxz
Linux命令(71)之unxz
557 1
|
Linux Windows
Windows 使用备忘
Windows 使用备忘
|
缓存 负载均衡 NoSQL
网站的性能优化思考点
网站的性能优化思考点
网站的性能优化思考点
|
Java
Netty「基石」之Reactor模式
Netty「基石」之Reactor模式
416 0
|
网络协议
TCP 通信并发服务器详解(附有案例代码)
TCP 通信并发服务器详解(附有案例代码)
|
JavaScript 前端开发 网络协议
HaaS轻应用(JavaScript)快速开始 @HaaS EDU K1
HaaS EDU K1是HaaS Education Kit1的缩写,是基于四核高性能HaaS1000芯片打造的、集颜值和内涵于一身的物联网教育开发板。作为云端一体全链路解决方案的软硬件积木平台,深度集成了AliOS Things物联网操作系统、HaaS轻应用、小程序和阿里云物联网平台等技术和服务,让开发者可以轻松的学习和开发云端一体全链路实战项目,解决实际场景或孵化创新应用。
HaaS轻应用(JavaScript)快速开始 @HaaS EDU K1
|
JSON 数据库 数据格式
Element el-transfer 穿梭框详解
本文目录 1. 前言 2. 基本用法 3. 可搜索 4. 自定义标题和按钮的文本 5. 设置数据项别名 6. 小结
4540 0
Element el-transfer 穿梭框详解
特斯拉要钱了
补贴政策相继放缓,对于这些正在成长期的新能源汽车厂商来说,到时候了吗?
447 0