问题描述
给定一个区间的集合,请合并所有重叠的区间。
示例 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