Leetcode 1288.删除被覆盖区间
1 题目描述(Leetcode题目链接)
给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。
只有当 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]
2 题解
排序,按照区间左边的值来拍,如果左边值相等就按右边的值来排,因此只需要判断当前区间右边的值和前一个区间右边的值的大小就可以了。
class Solution:
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
intervals = sorted(intervals, key = lambda x: (x[0], x[1]))
stack = [intervals[0]]
for i in range(1, len(intervals)):
if intervals[i][1] > stack[-1][1]:
stack.append(intervals[i])
return len(stack)