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

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

题目:合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [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)

相关推荐
代码探秘者2 小时前
【算法篇】5.链表
java·数据结构·人工智能·python·算法·spring·链表
1104.北光c°2 小时前
Leetcode3.无重复字符的最长子串 HashSet+HashMap 【hot100算法个人笔记】【java写法】
java·开发语言·笔记·程序人生·算法·leetcode·滑动窗口
鹭天2 小时前
目标检测学习笔记
笔记·学习·目标检测
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)支持区块链的工业物联网隐私保护新方案:基于格的可链接环签名技术
科技·算法·区块链
zhenxin01222 小时前
SpringMVC 请求参数接收
前端·javascript·算法
放下华子我只抽RuiKe52 小时前
深度学习学习路径规划
人工智能·深度学习·学习·github·ai agent·openclaw·development
C_Si沉思2 小时前
C++与硬件交互编程
开发语言·c++·算法
tankeven2 小时前
HJ148 迷宫寻路
c++·算法
今儿敲了吗2 小时前
Linux学习笔记第二章——虚拟机基础操作
linux·笔记·学习