(javaScript)leetcode每日一题 - 56. 合并区间

113 阅读1分钟

leetcode每日一题 - 56 56. 合并区间

image.png

题解

边界条件:length小于2返回参数本身
1、先拿数组中每个元素的第[0]个索引的值进行排序
2、声明变量curr,curr为当前合并的区间,初始值为intervals[0]
3、for循环,只要curr[1]>= intervals[i][0],则叠加curr。否则push进result
4、注意:执行到最后还有一个curr没输出最来,要加上才能返回

贴出代码

// 56. 合并区间
  const intervals: number[][] = [
    [1, 3],
    [2, 6],
    [8, 10],
    [15, 18],
  ]
  function merge(intervals: number[][]): number[][] {
    if (intervals.length < 2) {
      return intervals
    }
    // 需要排序
    intervals.sort((a, b) => a[0] - b[0])
    let curr = intervals[0] // 当前正在被合并的区间
    let result: number[][] = []
    for (let item of intervals) {
      if (item[0] <= curr[1]) {
        curr[1] = Math.max(curr[1], item[1]) //[1,4] [2,3]的情况
      } else {
        result.push(curr)
        curr = item
      }
    }
    //把最后的curr也push进来
    if (curr.length > 0) {
      result.push(curr)
    }
    return result
  }
  merge(intervals)