SOURCE

intervals = [[2, 3], [2, 2], [3, 3], [1, 3], [5, 7], [2, 2], [4, 6]];

function megrr(intervals) {
    let length = intervals.length;
    //数组排序,按照第一个
    intervals.sort(function (a, b) { return a[0] - b[0] });
    let args = [intervals[0]];
    // console.log(intervals);
    //每个数组中第二个数字和i+1个数组中比大小,如果成立,intervals数组长度减一
    for (let i = 0, j = 1; j < length; j++) {
        //定义一个临时的数组用于合并?
        // console.log('args',args);
        // console.log('intervals的第一个数字:',intervals[j][0]);
        // console.log(args[i][1], intervals[j][0]);
        if (args[i][1] >= intervals[j][0] && args[i][1] <= intervals[j][1]) {
            if (args[i][1] >= intervals[j][1]) {
            } else if(args[i][1] <= intervals[j][1]){
                let temp = args[i][0]
                args.pop();
                // console.log('顶掉以后',args);
                //合并
                args.push([temp, intervals[j][1]]);
                // console.log('what1?')
                // console.log(args);
            }
            //先顶掉最后面的,再合并

            // console.log(args)
        } else if (args[i][1] > intervals[j][1]) {
            // console.log('what2?')
            // console.log(args);
        }
        else {
            // console.log('what3?')
            args.push(intervals[j]);
            // console.log(args);
            i = i + 1;
        }
    }
    return args;
};

console.log(megrr(intervals))


var merge2 = function(intervals) {
    intervals.sort((a, b) => a[0] - b[0]) // 对每个数组的首元素进行升序排序
    const result = [] // 结果集
    let temp = intervals[0] // 取第一个数组作为临时变量
    for(let i = 1; i < intervals.length; i++) {
        const item = intervals[i]
        if(temp[1] >= item[0]) { // 此时说明有交集,取右边界大的元素来实现区间合并
            temp[1] = Math.max(temp[1], item[1]) 
        }else { // 没有交集直接放入结果集
            result.push(temp)
            temp = item
        }
    }
    result.push(temp) // 将最后的临时变量也放入结果集
    return result
};

console 命令行工具 X clear

                    
>
console