来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-intervals 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
解答
/*** @param {number[][]} intervals* @return {number[][]}*/const crash = (source, target) => {const [sLeft, sRight] = source;const [tLeft, tRight] = target;if (sLeft <= tLeft && tLeft <= sRight) {return [[sLeft, sRight < tRight ? tRight : sRight]];}if (sLeft <= tRight && tRight <= sRight) {return [[sLeft < tLeft ? sLeft : tLeft, sRight]];}if (tLeft <= sLeft && tRight >= sRight) {return [[tLeft, tRight]];}return sRight < tRight ? [source, target] : [target, source];}var merge = function(intervals) {intervals = intervals.sort((a, b) => a[0] - b[0]);return intervals.reduce((arr, interval) => {if (arr.length) {let last = arr.pop();return [...arr, ...crash(last, interval)];} else {return [interval];}}, []);};
