/* * 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]