微信公众号:醉前端,关注可了解更多题目。

题 目

Q:给出一个区间的集合,请合并所有重叠的区间。
  • 示例 1:

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

  • 示例 2:

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

答 案

const merge = intervals => {
  intervals.sort(function(a, b) {
        if (a[0] !== b[0]){
            return a[0] - b[0];
        }   
        return a[1] - b[1];
    });
    let len = intervals.length,
        ans = [],
        start, end;
    for (let i = 0; i < len; i++) {
        let s = intervals[i][0],
        e = intervals[i][1];
        if (start === undefined){
            start = s, end = e;
        }else if (s <= end){
            end = Math.max(e, end);
        }else {
            let part = [start, end];
            ans.push(part);
            start = s;
            end = e;
        }
    }
    if (start !== undefined) {
        let part = [start, end];
        ans.push(part);
    }
    return ans;
};

醉前端
174 声望83 粉丝

Time is a bird forever on the ring......