【每天学习一点算法 2026/03/26】合并区间

每天学习一点算法 2026/03/26

题目:合并区间

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

我这里首先想到的方法是,维护一个存储结果区间的数组 res 和 指向最新元素的 index,首先将 intervals 的第一个区间放进去,然后遍历剩余的区间,判断区间是否重合,重合就合并index不变,未重合就将区间 push 进 res,index++(由于区间顺序不确定,所以这种方法需要排序)

typescript 复制代码
function merge(intervals: number[][]): number[][] {
  if (intervals.length < 2) return intervals // 只有一个区间直接返回
  intervals = intervals.sort((a, b) => a[0] - b[0]) // 按区间左边界排序
  const res: number[][] = [intervals[0]] // 初始放入最小的区间
  let index = 0 // 初始指向第一个区间
  // 遍历剩余区间
  for (let i = 1; i < intervals.length; i++) {
    if (intervals[i][0] <= res[index][1]) {
       // 区间重合 合并区间
      res.splice(index, 1, [res[index][0], Math.max(res[index][1], intervals[i][1])])
    } else {
      // 区间未重合 
      res.push(intervals[i])
      index++
    }
  }
  return res
};

题目来源:力扣(LeetCode)

相关推荐
非优秀程序员7 小时前
第05章 播放器大战,暴风、快播与那一夜|《互联网产品恩仇录》
算法
Godspeed Zhao7 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
武子康13 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
David猪大卫13 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger14 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.15 小时前
CTF2MISC中等部分
开发语言·前端·学习
YueTann16 小时前
mgtv5th-baseline学习
学习
蒸蒸yyyyzwd18 小时前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气18 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity