[路飞]_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-合并区间


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

相关文章
|
Java Maven Docker
Docker----安装部署私有Dockerhub即Harbor
Docker----安装部署私有Dockerhub即Harbor
1399 0
Docker----安装部署私有Dockerhub即Harbor
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
510 4
|
JavaScript 前端开发
uniapp阻止事件冒泡
在 UniApp 中,阻止事件冒泡的方式与普通的前端开发类似,可以使用 @click.stop 或 @tap.stop 事件修饰符来阻止事件的进一步传播。
|
机器学习/深度学习 人工智能 供应链
精准农业:AI在农业生产中的应用
【10月更文挑战第1天】随着科技的发展,人工智能(AI)逐渐渗透到农业领域,通过精准监控和管理提升了农业生产效率和质量。AI在精准农业中的应用包括:精准农田管理,如个性化灌溉和施肥;作物病虫害识别与预测,及时发现并预防病虫害;智能农机自动化作业,提高作业效率;农产品质量检测与分类,确保品质;农业供应链优化,预测需求和价格。尽管面临数据收集、技术接受度等挑战,AI在精准农业中的未来前景广阔,有望实现全程自动化作业、数据驱动决策及智能预警系统,推动农业可持续发展。
807 11
题目----who is the killer?
题目----who is the killer?
80 1
|
运维 监控 Ubuntu
在Linux中,如何查看系统日志文件?
在Linux中,如何查看系统日志文件?
|
网络安全 数据安全/隐私保护 网络虚拟化
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
|
网络协议
TCP 通信并发服务器详解(附有案例代码)
TCP 通信并发服务器详解(附有案例代码)
|
Linux API 图形学
sdl库配置(linux/windows)
sdl库配置(linux/windows)
629 0
|
Linux Windows
Windows 使用备忘
Windows 使用备忘

热门文章

最新文章