每日一道算法题(11.20)

146 阅读1分钟
  • 题目来自力扣
  • 文章只记录个人解题思路,并非最优
  • 每周一至周五每日一题,周末不更新

56. 合并区间

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

实例
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

链接:leetcode-cn.com/problems/me…

解题

1.排序
2.假设当前的是left,下一个是right,判断有没有重叠

var merge = function(intervals) {
    intervals.sort((a, b) => a[0] - b[0]);
    let res = [];
    for (let i = 0; i < intervals.length; i++) {
        let left = intervals[i]
        let right = intervals[i+1] || []
        if (right.length && left[1] >= right[0]) {
            if (left[1] > right[1]) {
                intervals[i+1] = [left[0], left[1]]
            } else {
                intervals[i+1] = [left[0], right[1]]
            }
        } else {
            res.push(intervals[i])
        }
    }
    return res
};