题目描述
分析
根据题意,如同合并区间一样,先对 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
}