0
点赞
收藏
分享

微信扫一扫

leetcode 56. 合并区间

NicoalsNC 05-13 09:00 阅读 13

问题描述

给定一个区间的集合,请合并所有重叠的区间。

示例 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]]

注意: 输入类型为 List of Intervals,且区间的数目不超过 100。

解法一

解题思路:

首先,我们需要对区间按照起始位置进行排序,这样我们可以依次处理每个区间,并且只需要考虑与当前区间重叠的区间。排序后,我们遍历区间列表,对于每个区间,我们检查它是否与结果列表中最后一个区间重叠。如果重叠,我们合并这两个区间;如果不重叠,我们直接将当前区间添加到结果列表中。

/*
 * @lc app=leetcode.cn id=56 lang=javascript
 *
 * [56] 合并区间
 */

// @lc code=start
function merge(intervals) {
  if (intervals.length <= 1) return intervals;
  // 根据区间的起始位置进行排序
  intervals.sort((a, b) => a[0] - b[0]);
  const result = [intervals[0]];
  for (let i = 1; i < intervals.length; i++) {
    const prev = result[result.length - 1];
    if (intervals[i][0] <= prev[1]) {
      // 如果当前区间与结果列表中最后一个区间重叠,合并它们
      result[result.length - 1] = [prev[0], Math.max(prev[1], intervals[i][1])];
    } else {
      // 否则,直接添加当前区间到结果列表中
      result.push(intervals[i]);
    }
  }
  return result;
}
// @lc code=end
举报

相关推荐

0 条评论