1288. 删除被覆盖区间
给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。
只有当 c <= a
且 b <= d
时,我们才认为区间 [a,b)
被区间 [c,d)
覆盖。
在完成所有删除操作后,请你返回列表中剩余区间的数目。
示例:
输入:intervals = [[1,4],[3,6],[2,8]] 输出:2 解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
提示:
1 <= intervals.length <= 1000
0 <= intervals[i][0] < intervals[i][1] <= 10^5
- 对于所有的
i != j
:intervals[i] != intervals[j]
这道题目思考的关键还是在画图,画图才能分析出:当区间左端点相同的时候,右端点靠后的应该放在前面。
参考代码:
class Solution: def removeCoveredIntervals(self, intervals: List[List[int]]) -> int: """ :type intervals: List[List[int]] :rtype: int """ # 按照起点升序排列,起点相同时降序排列 intervals.sort(key=lambda a: (a[0], -a[1])) max_right = intervals[0][1] cnt = 0 for interval in intervals[1:]: if interval[1] > max_right: max_right = interval[1] else: cnt+=1 return len(intervals)-cnt