1288. 删除被覆盖区间

124 阅读1分钟

题目描述

leetcode-cn.com/problems/re…

分析

根据题意,如同合并区间一样,先对 intervals 做排序

然后开始遍历,检查每两项,是否有一项需要被删除

那么怎么去看哪项应该被删除:

  • 前一项如果包含后一项,删除后一项
  • 后一项包含前一项,删除前一项

算法

模拟

过程

排序 intervals

从第一项开始,两两比较包含关系,决定删除哪个或继续向后遍历

代码

/**
 * @param {number[][]} intervals
 * @return {number}
 */
var removeCoveredIntervals = function (intervals) {
  intervals.sort((a, b) => a[0] - b[0])
  for (let i = 1; i < intervals.length; i++) {
    const cur = intervals[i]
    const pre = intervals[i - 1]

    if (cur[0] >= pre[0] && cur[1] <= pre[1]) {
      intervals.splice(i, 1)
      i--
    } else if (cur[0] <= pre[0] && cur[1] >= pre[1]) {
      intervals.splice(i - 1, 1)
      i--
    }
  }

  return intervals.length
}