【每天学习一点算法 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)

相关推荐
Chris _data1 分钟前
WPF 上位机开发学习笔记 - 第四天
笔记·学习·wpf
旖旎夜光5 分钟前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
HY小宝F29 分钟前
树莓派 FFmpeg 实战笔记(二):命令行、源码编译与硬件编码的真相
学习·职场和发展·ffmpeg
2601_9672642841 分钟前
Jetpack Compose 实践指南:从入门到进阶
java·学习
小雪崩2 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
白露与泡影2 小时前
解密 Pi 的 Harness 工程:Agent 会话如何实现持久化与恢复
java·人工智能·算法
yiqiefeimeng2 小时前
C语言指针难倒90%人?买房比喻让你瞬间开窍
c语言·学习·编程·指针·比喻
GHL2842710902 小时前
Skill学习
学习·ai
田径他爸来了3 小时前
嵌入式学习第30天——软中断,Ip进程间的通信
学习
happyprince3 小时前
01-整体观-Codex全貌解读(源码)
算法·ai编程