题目详见435.无重叠区间
解题思路
- 按照右边界排序,右边界越小越好,这样留给下面的边界区域就可以更大
- 找最多无重叠区域的个数,等价于删除最少的重叠区间
Talk is cheap,show me the code
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
if len(intervals) == 0:
return 0
# 按照右边界排序
intervals.sort(key = lambda x:x[1])
# 第一个右边界 如果下一个区域不重叠
# 将right 赋值成下一个区域的右边界
# result 表示无重叠区域
right = intervals[0][1]
result = 1
for i in range(len(intervals)):
if intervals[i][0] >= right:
result += 1
right = intervals[i][1]# 一直用下一个区间的左边界和right进行比较
# 如果 左边界大于right 则是一个无重叠区域
return len(intervals) - result