将一组区间中所有重叠的区间进行合并,例如 [起点,终点] 这种方式

输入:[[1,3],[2,6],[15,18],[8,10],[10,11],[7,8]]
输出:[[1,6],[15,18],[7,11]]

分析:

首先需要排序,排序之后,就可以看看有没有重叠的,如果重叠就合并。

var arr = [[1,3], [2,6],[15,18],[8,10],[10,11],[7,8]]
function merge(arr){
    //排序
    arr.sort(function(a,b){
        if(a[0] != b[0]){
            return a[0]-b[0]
        }
        return a[1] - b[1]
    })
    let ans = [], start, end;
    //排序之后,看看有没有重叠的,如果有,合并
    for(let i=0;i<arr.length;i++){
            let s = arr[i][0], e = arr[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
}

console.log( merge(arr))