【前端算法每日一题】leetcode-056-合并区间

128 阅读1分钟

题目描述

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

解题思路

  • 先将区间数组按照第一个元素进行排序
  • 判断两个有序区间arr1arr2是否有交集
  • arr1[1] < arr2[0],无交集
  • arr1[1] >= arr2[0],有交集

解题代码(JavaScript)

var merge = function (intervals) {
  let sortIntervals = intervals.sort((a, b) => a[0] - b[0]);
  let prev = sortIntervals[0];
  let cur = null;
  let res = [];
  for (let i = 1; i < sortIntervals.length; i++) {
    cur = sortIntervals[i];
    if (prev[1] >= cur[0]) {
      prev[1] = Math.max(prev[1], cur[1]);
      continue;
    } else {
      res.push(prev);
      prev = cur;
    }
  }
  res.push(prev);
  return res;
};