Skip to content

Code:

js
/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */

var merge = function (intervals) {
    let length = intervals.length;
    if (length <= 1) return intervals;

    intervals.sort((a, b) => a[0] - b[0]);

    let result = [];
    let i = 0

    while(i < length) {
        const current = intervals[i]

        while(intervals[i + 1] && current[1] >= intervals[i + 1][0]) {

            if (intervals[i + 1][1] > current[1]) {
                current[1] = intervals[i + 1][1]
            }

            i++
        }

        result.push(current)

        i++
    }

    return result
};


// 优化版本  也就快了 3ms
var merge = function (intervals) {
    intervals.sort((a, b) => a[0] - b[0]);
    let result = [intervals[0]];
    let index = 0

    for (let i = 1; i < intervals.length; i++) {
        if (result[index][1] >= intervals[i][0]) {
            result[index][1] = Math.max(intervals[i][1], result[index][1])
        } else {
            result.push(intervals[i])

            index++
        }
    }

    return result
};

console.log(merge([[1, 3],[2, 6],[8, 10],[15, 18]]));
console.log(merge([[1,4],[4,5]]))
console.log(merge([[1,4],[2,3]]))
console.log(merge([[2,3],[4,5],[6,7],[8,9],[1,10]]))

❤ With Algorithm