/*
 * function Interval(a, b){
 *   this.start = a || 0;
 *   this.end = b || 0;
 * }
 * [a,b][c,d]
 * b<c [a,b][c,d]
 * d<b [a,b]
 * b<d [a,d]
 * 
 */

/**
 * 
 * @param intervals Interval类一维数组 
 * @return Interval类一维数组
 */
function merge( intervals ) {
    // write code here
    intervals.sort((a,b) => a.start - b.start)
    let pointer = []
    if (intervals[0]) pointer.push(intervals[0])

    for (let i=1; i<intervals.length; i++) {
        let len = pointer.length
        let pointerS = pointer[len-1].start
        let pointerE = pointer[len-1].end
        let curS = intervals[i].start
        let curE = intervals[i].end
        if (pointerE < curS) {
            pointer.push(new Interval(curS, curE))
        } else if (pointerE < curE) {
            pointer[len-1] =  new Interval(pointerS, curE)
        }
    }
    return pointer
}
module.exports = {
    merge : merge
};

重点在于先排序,然后就只有两种选择如下:

[a,b][c,d]

* b<c [a,b][c,d]

* b<d [a,d]