给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。
只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。
在完成所有删除操作后,请你返回列表中剩余区间的数目。
示例:
输入:intervals = [[1,4],[3,6],[2,8]] 输出:2 解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
代码
var removeCoveredIntervals = function(intervals) {
// 首先特判
if (intervals.length < 2) return intervals.length
// 将区间按区间起始位置升序排序,如果相等则按区间结束位置降序排序
// 因为需要判断当前区间是不是被前面的区间包含
intervals.sort((a, b) => {
if (a[0] == b[0]) return b[1] - a[1]
return a[0] - b[0]
})
let ans = []
ans.push(intervals[0])
for (let i = 1; i < intervals.length; i++) {
// 如果当前区间不被前面区间包含,则不需要删除当前区间,否则删除当前区间
if (intervals[i][0] < ans[ans.length - 1][0] || intervals[i][1] > ans[ans.length - 1][1]) {
ans.push(intervals[i])
}
}
return ans.length
};