来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-intervals 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

解答

  1. /**
  2. * @param {number[][]} intervals
  3. * @return {number[][]}
  4. */
  5. const crash = (source, target) => {
  6. const [sLeft, sRight] = source;
  7. const [tLeft, tRight] = target;
  8. if (sLeft <= tLeft && tLeft <= sRight) {
  9. return [[sLeft, sRight < tRight ? tRight : sRight]];
  10. }
  11. if (sLeft <= tRight && tRight <= sRight) {
  12. return [[sLeft < tLeft ? sLeft : tLeft, sRight]];
  13. }
  14. if (tLeft <= sLeft && tRight >= sRight) {
  15. return [[tLeft, tRight]];
  16. }
  17. return sRight < tRight ? [source, target] : [target, source];
  18. }
  19. var merge = function(intervals) {
  20. intervals = intervals.sort((a, b) => a[0] - b[0]);
  21. return intervals.reduce((arr, interval) => {
  22. if (arr.length) {
  23. let last = arr.pop();
  24. return [...arr, ...crash(last, interval)];
  25. } else {
  26. return [interval];
  27. }
  28. }, []);
  29. };